1

我向现有应用程序添加了一个异步端点spring-mvc

@RestController
public class MyController {
    @PostMapping("/")
    public Mono<String> post(Object body) {
       return Mono.just("test");
       //webClient.retrieve().bodyToMono(String.class);
    }
}

我想创建一个将记录请求正文有效负载的全局拦截器/过滤器。但是我怎样才能访问它呢?

我尝试添加 a 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;
        }
}

可能负载尚未出现在请求中,或者已被读取。那么在这种异步情况下如何访问正文?

4

1 回答 1

0

不幸的是,在Webflux中,您不能使用HandlerInterceptorAdapter,因为它来自web mvc模块并且仅适用于 servlet。我找到了一篇带有解决方案的好文章。

PS 如果要使用响应式端点,您必须删除 spring-mvc 依赖项。

于 2020-04-01T09:59:28.893 回答