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发送。我尝试了不起作用的输出流,当尝试转换为对象时我得到空值。
请查看上面的图片以了解 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。
上图显示了其余API的结果,但是当我尝试获取拦截器中的内容时,内容为空且内容长度为0。
关于java - 如何在 Spring Boot 拦截器中从 HttpServletResponse 获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58619830/