使用Micronaut进行客户端错误处理

问题描述

我正在REST服务和消费者应用程序之间使用Micronaut层。 | REST服务|-> | Micronaut客户端/控制器|-> |消费者应用程序|。 REST服务返回错误时,控制器应传播错误代码。 REST服务脱机时,控制器应返回某种500错误代码。 但是,在两种情况下,它现在都返回一个带有200错误代码的空主体。

例如,这里是我的控制器:

@Controller("/api/v1") 
public class MyController {

private final ClientNetworkList clientNetworkList;

public MyController( 
    ClientNetworkList clientNetworkList,){
    this.clientNetworkList = clientNetworkList;
}

    @Get(uri = "/networkList",produces = MediaType.APPLICATION_JSON_STREAM)
    Flowable<NetworkListPackage> packagesNetworkList() { 
        return clientNetworkList.fetchPackages();
    }
}

和客户:

@Client(FabricConfiguration.FABRIC_API_URL) 
public interface ClientNetworkList{
     @Get("/auth/networklist") 
    Flowable<NetworkListPackage> fetchPackages();   
}

如何传播或抛出正确的正文和错误代码? 我应该如何使用@Error注释,应该在控制器中还是在过滤器中实现它?

解决方法

Micronaut对此具有断路器支持。

我建议使用@Fallback注释并抛出一个异常,该异常将产生500错误代码。请参阅Micronaut文档中的7.3.7 Client Fallback