在 HandlerInterceptor 获取 RequestBody 和 ResponseBody

2022-09-03 08:24:30

我必须实现的逻辑是记录所有请求,并将正文提供给DB。

所以我决定使用:方法。有两个参数传递给此方法和其他参数。afterCompletionHandlerInterceptorHttpServletRequestHttpServletResponse

问题是:如何获取和从提供的对象中获取和从中获取?RequestBodyResponseBody

据我所知,在控制器,我们可以使用和。我可以在 中重复使用它们吗?@RequestBody@ResponseBodyHandlerInterceptor


答案 1

您可以扩展和实现该方法:RequestBodyAdviceAdapterafterBodyRead

@ControllerAdvice
public MyRequestBodyAdviceAdapter extends RequestBodyAdviceAdapter {

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

        // write body -your input dto- to logs or database or whatever

        return body;
    }

}

RequestBodyAdvice 在 请求链之前预先设置了 .它恰好是在http请求输入流转换为您的对象之后。HandlerInterceptor


答案 2

据我所知,只能阅读一次。因此,您不应该在.这里有一些解释RequestBodyResponseBodyInterceptor


推荐