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
}
- return 类型应该是
HttpResponse
、HttpResponse<ObjectA>
还是 Single<HttpResponse<ObjectA>>
或 Maybe<HttpResponse<ObjectA>
?
- 有没有一种方法可以显式声明
Single
或 Maybe
的错误类型,以帮助代码审查者理解 API 可以 return ObjectB
或 ObjectC
以防出错?
- 如果发生未处理的异常,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 甚至不一定能够知道这些。
我是 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
}
- return 类型应该是
HttpResponse
、HttpResponse<ObjectA>
还是Single<HttpResponse<ObjectA>>
或Maybe<HttpResponse<ObjectA>
? - 有没有一种方法可以显式声明
Single
或Maybe
的错误类型,以帮助代码审查者理解 API 可以 returnObjectB
或ObjectC
以防出错? - 如果发生未处理的异常,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 甚至不一定能够知道这些。