Я хочу получить доступ к HTTP-запросам и ответным данным в одном месте кода. Я пытаюсь реализовать RequestBodyAdvice и ResponseBodyAdvice в отдельных классах, и это работало нормально, но в двух отдельных местах кода. Затем я пытаюсь реализовать эти два в одном классе, но только методы RequestBodyAdvice или ResponseBodyAdvice . например, в приведенном ниже коде только beforeBodyRead и afterBodyRead (они принадлежат RequestBodyAdvice ), и для меня странно, что эти два вызывались два раза для каждого запрос! (в то время, когда я реализую эти интерфейсы в отдельных классах, каждый метод вызывается только один раз):
@ControllerAdvice
public class CustomResponseBodyAdviceAdapter implements RequestBodyAdvice, ResponseBodyAdvice<Object>{
public CustomResponseBodyAdviceAdapter() {
}
@Override
public boolean supports(MethodParameter methodParameter,
Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public Object beforeBodyWrite(Object o,
MethodParameter methodParameter,
MediaType mediaType,
Class<? extends HttpMessageConverter<?>> aClass,
ServerHttpRequest serverHttpRequest,
ServerHttpResponse serverHttpResponse) {
return o;
}
@Override
public boolean supports(MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@Override
public HttpInputMessage beforeBodyRead(HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) throws IOException {
return httpInputMessage;
}
@Override
public Object afterBodyRead(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return o;
}
@Override
public Object handleEmptyBody(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
return o;
}
}
Я хочу реализовать эти два интерфейса в одном классе так, чтобы все методы вызывались правильно.