问题描述
我正在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。