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?