1

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

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

1 回答 1

1

问题一:

返回类型应该是 HttpResponse、HttpResponse 还是 Single<HttpResponse> 还是 Maybe<HttpResponse?

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

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

例如:

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

问题2:

有没有一种方法可以显式声明 Single 或 Maybe 的错误类型,以帮助代码审阅者了解此 API 在出现错误时可以返回 ObjectB 或 ObjectC?

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

问题 3:

如果发生未处理的异常,RX 会自动关闭和清理资源吗?我也在 Android 上工作,我们需要手动关闭流。

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

于 2021-04-14T12:17:44.537 回答