Как войти в систему RequestBody в контроллере asyn c spring? - PullRequest
1 голос
/ 01 апреля 2020

Я добавил конечную точку asyn c в существующее приложение 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;
        }
}

Возможно, полезная нагрузка еще не присутствует в запросе, или уже был прочитан. Так как я могу получить доступ к телу в этом асин c случае?

1 Ответ

0 голосов
/ 01 апреля 2020

К сожалению, в Webflux вы не можете использовать HandlerInterceptorAdapter , поскольку он поступил из модуля web mvc и работает только с сервлетами. Я нашел хорошую статью с решениями .

PS. Вы должны удалить зависимости Spring- mvc, если собираетесь использовать реактивные конечные точки.

...