webflux spring boot 应用程序的过滤器,返回 ResponseEntity<?>

Posted

技术标签:

【中文标题】webflux spring boot 应用程序的过滤器,返回 ResponseEntity<?>【英文标题】:Filters for webflux spring boot app, which return ResponseEntity<?> 【发布时间】:2019-06-10 13:14:09 【问题描述】:

我的 Spring Boot 应用程序配置为反应式。但是我的 REST API 端点配置为返回没有 Mono 或 Flux 的 ResponseEntity。

@GetMapping("/wiki/test")
    public ResponseEntity<?> test() 
        log.info("TEST CALLED????");
        return ResponseEntity.ok().body("HALLO");
    

我想实现过滤器,它将检查每个端点的传入标头。旧的 Servlet 过滤器当然不起作用,对于 webflux 和其他的新 WebFilter 也不起作用。

我的项目位于githubwiki controller

我不想使用基于路由器的端点,我更喜欢 Spring boot 下的 Netty。我可以同时使用哪种过滤器:反应式和 servlet 应用程序?有什么建议吗?

【问题讨论】:

你为什么不返回 Mono 我应该在每个响应中添加一个 Mono,想象一下大型应用程序,人们已经编写了类似使用 ResponseEntity 的代码,所以我想将 tomcat 更改为 webflux,但我不想在 Rest Controller 中进行函数式编程。 【参考方案1】:

如果您的问题是“我将编写什么样的代码来在反应式和非反应式 Spring 应用程序中用作过滤器,答案是您不能。您可以编写一个简单的类/bean,从不过,WebFilter 或 Filter 都可以。

【讨论】:

我想使用 Spring boot + netty,但我不想在 REST 控制器中使用函数式编程。 这就像说您想驾驶特斯拉但使用汽油为其提供动力。使用 Netty 时您需要编写非阻塞代码,否则您的服务器将只能支持每个 cpu 核心一次处理一个事务。 Spring Webflux 和 Spring MVC 根本不同,因为它们工作的环境完全不同。 是的,为什么我喜欢 vertx,我认为函数式编程不适合控制器,webflux 很有趣,但应该改进。谢谢

以上是关于webflux spring boot 应用程序的过滤器,返回 ResponseEntity<?>的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Boot 对 WebFlux 进行异常处理?

Spring Boot webflux介绍

如何使用 Spring Boot Security 修复 Spring Boot Webflux 应用程序中的“名称为 requestMappingHandlerAdapter 的 bean 定义无效

一文带您搞清什么是 Spring Boot 2.x WebFlux

Spring Boot 2.0 WebFlux 教程 | 入门篇

如何使用WebFlux在Spring Boot 2中设置登录页面?