RequestBodyAdviceAdapter - Не перехватывает запрос без тела

RequestBodyAdviceAdapter (spring) не перехватывает запросы (GET|POST...), и соответственно не логирует его, если контроллер без тела запроса или без параметров.

Примеры контроллера:

    @PostMapping(
            value = "/udata",
            headers = {"Accept=application/json"},
            produces = "application/json;charset=UTF-8"
    )
public UserData getUserData1(){
return userData;
} 
@GetMapping(
            value = "/udata/get",
            headers = {"Accept=application/json"},
            produces = "application/json;charset=UTF-8"
    )
public UserData getUserData2(){
return userData;
} 

логер в RequestBodyAdviceAdapter:

@ControllerAdvice
public class MyReqAdapter extends RequestBodyAdviceAdapter {

    @Autowired
    LogSrv logSrv;

    @Autowired
    HttpServletRequest httpServletRequest;

    @Override
    public boolean supports(MethodParameter methodParameter, Type type,
                            Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }

    @Override
    public Object afterBodyRead(Object body, HttpInputMessage inputMessage,
                                MethodParameter parameter, Type targetType,
                                Class<? extends HttpMessageConverter<?>> converterType) {

        logSrv.logReq(httpServletRequest, body);
        return super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);
    }

    @Override
    public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage,
                                  MethodParameter parameter, Type targetType,
                                  Class<? extends HttpMessageConverter<?>> converterType) {

        logSrv.logReq(httpServletRequest, body);
        return super.handleEmptyBody(body, inputMessage, parameter, targetType, converterType);
    }

}

Получается что оно даже не заходит сюда (afterBodyRead, handleEmptyBody и даже сюда supports), если контроллер без параметров, но если в контроллере есть какой-то параметр @RequestBody или @RequestParam, то все нормально работает: и перехватывается запрос, и логируется, даже если передать NULL в тело (в принципе на это и расчет handleEmptyBody).

Почему не отрабатывает этот класс, если контроллер без параметров, как мне логировать входящий запрос без body или params?


Ответы (0 шт):