java - 如何在 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 为空。
解决方案
@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 时。
推荐阅读
- python - Seaborn - sns.setstyle('ticks') 的目的
- c# - ErrorvCS1955 - 不可调用的成员“_Default.ResultsArray”不能像方法一样使用。我该如何解决?
- javascript - Chart.js 隐藏标签
- javascript - 获取数组变量react元素的位置
- html - 倒置剪贴蒙版(正弦波) - 使用 CSS
- hibernate-envers - Spring envers 不审核 OneToMany 关系
- json - 颤振JSON解码未处理的异常:类型'Null'不是'String'类型的子类型
- python - django项目中带有CSS和HTML的中心位置图像
- azure - Citrix 是否支持使用 Azure AD 进行无密码单点登录?
- javascript - CSV 文件已下载但未保存到计算机