java - Spring Webflux : Controller return Mono<ResponseEntity<MyPojo>> vs Mono<MyPojo>

标签 java spring-webflux

关于我在 Spring Webflux 中看到的一些返回类型的小问题。
在许多示例中,如在线教程,Spring Webflux 项目的其余 Web Controller 将返回 MyPojo 的 Mono Mono<MyPojo>就像是

    public Mono<MyPojo> monoPojo(String parameter) {
        return WebClient.create("http://...").get().retrieve().bodyToMono(MyPojo.class)
                .map(oneMyPojo -> unregisterRepository.insert(oneMyPojo))
                ;
    }
但我也遇到了它返回响应实体的项目,MyPojo 的响应实体的 Mono Mono<ResponseEntity<MyPojo>> :
    public Mono<ResponseEntity<MyPojo>> monoResponseEntityPojo(String parameter) {
        return WebClient.create("http://...").get().retrieve().bodyToMono(MyPojo.class)
                .map(oneMyPojo -> unregisterRepository.insert(oneMyPojo))
                .map(ResponseEntity::ok)
                ;
    }
我很难理解 Mono 的使用。
请问这个 Mono 可以给 Mono 带来什么样的好处?
谢谢

最佳答案

让我们澄清一些事情
一个 ResponseEntity<T>来自 org.springframework.http包同时一个 ServerResponse来自 org.springframework.web.reactive.function.server包裹。
这应该作为开始应该给您提示何时使用什么,以及在哪里。
但简而言之,您可以通过两种方式使用 webflux,或者使用老式 @RestController注释,每个路径都有带注释的函数。这是常规 servlet spring web 和 webflux 异步事件驱动编程之间的一种“向后兼容模式”。ResponseEntities从旧 spring-web 返回而如果您选择使用存在于 webflux 中的功能端点,则需要返回 ServerResponses .
如果您查看类的代码,您会发现它们的某些部分相同,但其他部分不同,尤其是它们如何存储主体和序列化主体。Handler functionsFilter functions在 webflux 中仅适用于 ServerResponses .
现在回答您的问题,返回 Mono<ResponseEntity<T>Mono<T> .
好吧,这一切都归结为你有多懒。
如果您返回 Mono<T>该框架将尝试找出您在 Mono 中拥有的内容类型。 ,然后创建一个 ResponseEntity因此。因此,如果您将其序列化为 json,它将设置 content-type为您,并将状态通常设置为 200 OK如果您愿意,您可以构建您的 ResponseEntity完全自定义,并返回任何状态代码、任何正文和任何标题等。
所以归根结底是你有多懒,你想让框架为你做多少,你想要明确地做多少,然后自己输入所有内容,或自定义。
我,我很懒,我只是返回一些有用的东西。

关于java - Spring Webflux : Controller return Mono<ResponseEntity<MyPojo>> vs Mono<MyPojo>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69080915/

相关文章:

java - Javafx-在具有gradle错误的intelliJ上:包javafx.fxml不存在导入javafx.fxml.FXML

java - Maven:无法创建 Javadoc

java - 如何将结果集从 MSSQL 复制到 MySQL?也许开放查询?

java - CompletableFuture then 异常后撰写

java - Spring Reactive 使用 FLUX 或 MONO 使用 POST

java - NoSuchElementException 不解决

java - 如何将 listView 放入 android studio 的 ScrollView 中?

java - Spring WebFlux Reactor - 更新 Flux 中的对象

spring-boot - 使用 spring-security 和响应式(Reactive) spring 的自定义身份验证

java - 执行器端点返回 "circuitBreakers": {"status" :"UNKNOWN"} despite management. health.circuitbreakers.enabled: true