【发布时间】:2020-04-01 08:55:54
【问题描述】:
我向现有的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;
}
}
可能负载尚未出现在请求中,或者已被读取。那么在这种异步情况下如何访问正文?
【问题讨论】:
-
使用
IOUtils.toString(request.getReader())获取请求正文内容,不知道我们的代码有什么不同?
标签: java spring spring-mvc spring-webflux spring-reactive