[英]How to log RequestBody in async spring controller?
我向现有的spring-mvc
应用程序添加了一个异步端点:
@RestController
public class MyController {
@PostMapping("/")
public Mono<String> post(Object body) {
return Mono.just("test");
//webClient.retrieve().bodyToMono(String.class);
}
}
我想创建一个全局拦截器/过滤器来记录请求正文有效负载。 但是我怎样才能访问它呢?
我尝试添加一个HandlerInterceptorAdapter
,但有效负载始终为空:
static class LoggingInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
ContentCachingRequestWrapper wrapper = new ContentCachingRequestWrapper(request);
byte[] buf = wrapper.getContentAsByteArray();
System.out.println(buf);
System.out.println(buf.length);
return true;
}
}
可能有效负载尚未出现在请求中,或者已经被读取。 那么如何在这种异步情况下访问正文呢?
不幸的是,在Webflux 中您不能使用HandlerInterceptorAdapter,因为它来自web mvc模块并且仅适用于 servlet。 我找到了一篇带有解决方案的好文章。
PS 如果要使用反应式端点,您必须删除 spring-mvc 依赖项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.