Реализуйте RequestBodyAdvice и ResponseBodyAdvice <T>в одном классе - PullRequest
0 голосов
/ 12 января 2020

Я хочу получить доступ к 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;
    }
}

Я хочу реализовать эти два интерфейса в одном классе так, чтобы все методы вызывались правильно.

...