【问题标题】:What should be the return type of reactive controller methods in Micronaut?Micronaut 中反应式控制器方法的返回类型应该是什么?
【发布时间】:2021-04-14 07:03:48
【问题描述】:

我是 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 上工作,我们需要手动关闭流。

【问题讨论】:

    标签: rx-java reactive-programming rx-java2 micronaut micronaut-rest


    【解决方案1】:

    问题 1:

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

    来自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 的错误类型或 也许是为了帮助代码审查者理解这个 API 可以返回 发生错误时是 ObjectB 还是 ObjectC?

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

    问题 3:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-12
      • 2020-12-31
      • 1970-01-01
      • 2021-11-19
      • 2015-06-04
      • 2010-10-15
      • 2017-08-16
      • 2018-09-26
      相关资源
      最近更新 更多