php小编香蕉介绍,spring boot webflux是一种基于响应式编程的web框架,提供了一种异步非阻塞的方式处理http请求。然而,有时候我们可能会遇到webfilter不起作用的问题。webfilter是用于在请求进入web应用程序之前或之后执行某些操作的组件。本文将探讨可能导致webfilter不起作用的原因,并提供解决方案,以确保webfilter在spring boot webflux中正常工作。
问题内容
我有下面的控制器,它返回字符串的 mono
@restcontroller@requestmapping("api/v1/test")public class testcontroller { @postmapping public mono getdraft() { return mono.just("ok"); }}
登录后复制
我添加了bean webfilter来在请求到来时进行一些处理,问题是bean中的消息没有显示在控制台中,我尝试添加断点来调试,但是当我测试api时却没有停在断点处。在 actuator/beans 中,我找到了 bean slf4jmdcfilter。还有另一个配置要添加吗?
@Configurationpublic class WebConfig { public static final String TRX_ID = "transactionId"; public static final String PATH_URI = "pathUri"; @Bean @Order(Ordered.HIGHEST_PRECEDENCE) WebFilter slf4jMdcFilter() { return (exchange, chain) -> { System.out.println("Filtering request"); String requestId = exchange.getRequest().getId(); return chain.filter(exchange) .contextWrite(Context.of(TRX_ID, requestId) .put(PATH_URI, exchange.getRequest().getPath())); }; }}
登录后复制
解决方法
这可以通过使用 defercontextual(function)& transformdeferredcontextual(bifunction)
@Componentpublic class YourFilter implements WebFilter { @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { return Mono.deferContextual(contextView -> chain.filter(exchange) .contextWrite(context -> context.put("KEY", "VALUE"))); }}// controller @Override public Mono testApi(ServerWebExchange exchange) { return Mono.just("OK") .transformDeferredContextual((data, context) -> { log.info("context is {}", (Object) context.get("KEY")); return data; }); }
登录后复制
以上就是Spring boot WebFlux:WebFilter 不起作用的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2621982.html