Micronaut 中的 return 类型的反应式控制器方法应该是什么?

What should be the return type of reactive controller methods in Micronaut?

我是 Micronaut 的新手,在查看示例时我无法找到控制器方法的正确 return 类型。我需要一个接受字符串的 API 方法,验证输入,从数据库中获取一些数据和 returns ObjectA 用于成功处理,ObjectB 用于处理业务逻辑中的异常ObjectC unhandled/runtime 个异常。

public HttpResponse mapItem(@Valid final CustomRequest request,
                            final HttpRequest httpRequest) {
    //@Valid can throw exceptions
    return service.process(request);    //can throw exception
}
  1. return 类型应该是 HttpResponseHttpResponse<ObjectA> 还是 Single<HttpResponse<ObjectA>>Maybe<HttpResponse<ObjectA>
  2. 有没有一种方法可以显式声明 SingleMaybe 的错误类型,以帮助代码审查者理解 API 可以 return ObjectBObjectC 以防出错?
  3. 如果发生未处理的异常,RX disposable 会自动关闭并清理资源吗?我还在 Android 上工作,我们需要手动关闭流。

问题一:

Should the return type be HttpResponse, HttpResponse or Single<HttpResponse> or Maybe<HttpResponse?

来自https://docs.micronaut.io/2.4.2/guide/#reactiveResponses

Micronaut supports returning common reactive types such as Single or Observable (or the Mono type from Reactor 3.x), an instance of Publisher or CompletableFuture from any controller method.

例如:

    @Post("/saveReactive")
    public Single<HttpResponse<Person>> save(@Body Single<Person> person) { 
        return person.map(p -> {
                    inMemoryDatastore.put(p.getFirstName(), p); 
                    return HttpResponse.created(p); 
                }
        );
    }

问题二:

Is there a way I can explicitly declare the error type of Single or Maybe to help the code reviewers understand this API can return ObjectB or ObjectC in case of errors?

可能取决于你真正的意思。 https://docs.micronaut.io/2.4.2/guide/#localErrorHandling 描述了许多错误处理选项,包括 return 类似于 HttpResponse<JsonError>.

的错误处理程序

问题三:

Will the RX disposable auto-close and cleanup resources in case an unhandled exception happens? I also work on Android where we need to close the streams manually.

对于 Micronaut 管理的资源,是的,但不一定是所有资源。您可以编写创建大量资源的代码,而 Micronaut 甚至不一定能够知道这些。