spring mvc项目的拦截器通过注解@ResponseBody如何得到http POST响应数据?
使用org.springframework.web.util.ContentCachingResponseWrapper方法
场景:
controller使用了@ResponseBody注解,在拦截器中获取Response数据,在响应前拿到数据进行业务逻辑处理。
1,具体方法
public static String readPostJsonData(HttpServletResponse response) throws IOException {
if (response instanceof ContentCachingResponseWrapper) {
ContentCachingResponseWrapper responseWrapper = (ContentCachingResponseWrapper) response;
int contentLenth = ((ContentCachingResponseWrapper) response).getContentSize();
if (contentLenth <= 0) {
return null;
}
byte[] bytes = new byte[contentLenth];
InputStream is = responseWrapper.getContentInputStream();
for (int index = 0; index < contentLenth; index++) {
int value = is.read();
if (value == -1) {
// is.reset();
break;
}
bytes[index] = (byte) value;
}
responseWrapper.getContentAsByteArray();//这里是为了测试
String data = new String(bytes);
System.out.println("http util .........data:" + data);
return data;
}
System.out.println("http util no data in request body");
return "";
}
2.Controller
3,在postHandle中调用readPostJsonData方法获取response响应值
网友评论