首页 > 解决方案 > 如何在 Spring Boot 拦截器中从 HttpServletReponse 获取内容

问题描述

public class ActivityLogInterceptor extends HandlerInterceptorAdapter {
public ActivityLogInterceptor() {
    super();
}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    return super.preHandle(request, response, handler);
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    // I need the response here that has been returned in the rest api
    super.postHandle(request, response, handler, modelAndView);
}

}

这是springboot HandlerInterceptorAdapter,我需要postHandle中的响应体,它是由rest api发送的。我尝试了不起作用的输出流,尝试转换为对象时得到空值。

在此处输入图像描述

请在上面的图片中查看 HttpServletResponse 的方法,我无法找到内容或正文来获得确切的响应,即使 ModelView 为空。

标签: javaspring-bootservletsinterceptor

解决方案


@Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
        System.out.println(responseWrapper.getContentAsByteArray());
        super.postHandle(request, response, handler, modelAndView);
    }

ContentCachingResponseWrapper是从 ServletResponse 中获取内容。我可以看到来自 REST API 的大摇大摆的响应结果,但是当我尝试打印它时,内容长度为 0。

在此处输入图像描述

上图显示了其余 api 的结果,但是当我试图获取拦截器中的内容为空且内容长度为 0 时。


推荐阅读