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

问题描述

我是 Micronaut 的新手,查看示例时我无法确定控制器方法的正确返回类型。我需要一个 API 方法来接受字符串、验证输入、从数据库获取一些数据并返回 ObjectA 以成功处理,ObjectB 用于处理业务逻辑中的异常,ObjectC 用于未处理/运行时异常。

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

解决方法

问题 1:

返回类型应该是HttpResponse、HttpResponse还是 单个 或 Maybe

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

Micronaut 支持返回常见的响应式类型,例如 Single 或 Observable(或 Reactor 3.x 中的 Mono 类型),一个实例 来自任何控制器方法的 Publisher 或 CompletableFuture。

例如:

C

问题 2:

有没有办法可以明确声明错误类型为 Single 或 也许可以帮助代码审查者理解这个 API 可以返回 如果出现错误,ObjectB 还是 ObjectC?

可能取决于您真正的意思。 https://docs.micronaut.io/2.4.2/guide/#localErrorHandling 描述了许多错误处理选项,包括返回类似 @Post("/saveReactive") public Single<HttpResponse<Person>> save(@Body Single<Person> person) { return person.map(p -> { inMemoryDatastore.put(p.getFirstName(),p); return HttpResponse.created(p); } ); } 的错误处理程序。

问题 3:

RX 是否会一次性自动关闭和清理资源,以防万一 发生未处理的异常?我也在我们需要的 Android 上工作 手动关闭流。

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