java - 如何在 Spring Boot 拦截器中从 HttpServletResponse 获取内容

标签 java spring-boot servlets interceptor

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中的响应体,该响应体已由其余api发送。我尝试了不起作用的输出流,当尝试转换为对象时我得到空值。

enter image description here

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

最佳答案

@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 中看到 swagger 的响应结果,但当我尝试打印它时,内容长度为 0。

enter image description here

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

关于java - 如何在 Spring Boot 拦截器中从 HttpServletResponse 获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58619830/

相关文章:

从 servlet 返回到 JSP 时,Javascript 更改消失

java - 无法使用 JSTL 访问 bean

java - 如何获取 Web 应用程序中所有 HttpSession 对象的列表?

html - Thymeleaf + Spring Boot : placing html in subfolders

java 11 和 spring boot 错误 : this_class should be module-info

java - 无法使用 selenium 中的 poi jar 将所有记录写入 Excel 表中

java - 在 Spring 框架中使用 registerShutdownHook()

mysql - 如何在 Spring Boot 中使用 Thymeleaf 保存角色?

java - 具有构造函数和设置属性的 Yaml 文件不起作用

java - 在 Windows 上使用 "storm jar"命令远程部署 Storm 拓扑