如何解决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
}
- 返回类型应该是
HttpResponse
、HttpResponse<ObjectA>
还是Single<HttpResponse<ObjectA>>
或Maybe<HttpResponse<ObjectA>
? - 有没有一种方法可以明确声明
Single
或Maybe
的错误类型,以帮助代码审查人员了解此 API 可以在以下情况下返回ObjectB
或ObjectC
错误? - 如果发生未处理的异常,RX
disposable
会自动关闭和清理资源吗?我也在 Android 上工作,我们需要手动关闭流。
解决方法
问题 1:
返回类型应该是HttpResponse、HttpResponse还是
单个 来自https://docs.micronaut.io/2.4.2/guide/#reactiveResponses: Micronaut 支持返回常见的响应式类型,例如 Single 或
Observable(或 Reactor 3.x 中的 Mono 类型),一个实例
来自任何控制器方法的 Publisher 或 CompletableFuture。 例如: 问题 2: 有没有办法可以明确声明错误类型为 Single 或
也许可以帮助代码审查者理解这个 API 可以返回
如果出现错误,ObjectB 还是 ObjectC? 可能取决于您真正的意思。 https://docs.micronaut.io/2.4.2/guide/#localErrorHandling 描述了许多错误处理选项,包括返回类似 问题 3: RX 是否会一次性自动关闭和清理资源,以防万一
发生未处理的异常?我也在我们需要的 Android 上工作
手动关闭流。 对于 Micronaut 管理的资源,是的,但不一定是所有资源。您可以编写创建大量资源的代码,而 Micronaut 甚至不一定能够了解这些。C
@Post("/saveReactive")
public Single<HttpResponse<Person>> save(@Body Single<Person> person) {
return person.map(p -> {
inMemoryDatastore.put(p.getFirstName(),p);
return HttpResponse.created(p);
}
);
}
的错误处理程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。