有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在异步spring控制器中记录RequestBody?

我向现有的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;
        }
}

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


共 (1) 个答案

  1. # 1 楼答案

    不幸的是,在Webflux中,您不能使用HandlerInterceptorAdapter,因为它来自WebMVC模块,只能与servlet一起使用。 我找到一篇关于solutions的好文章

    另外,如果要使用被动端点,必须删除spring mvc依赖项