5 回答
TA贡献2036条经验 获得超8个赞
response是采用缓存输出流的方式回写,当执行到HandlerInterceptor.afterCompletion时,大部分数据可能已经写回的客户端, 没有办法获得了. 可以尝试用Servlet Filter, 把里面的response替换成自己的实现, 但要注意的是如果不用流,而是保留在内存里,那么以性能和内存都要小心处理才行.
TA贡献1834条经验 获得超8个赞
重写HttpServletResponseWrapper,class MyResponseWrapper extends HttpServletResponseWrapper,
在Filter里面public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException
MyResponseWrapper responseWrapper=new MyResponseWrapper((HttpServletResponse)response);
即可使用responseWrapper得到json
TA贡献1799条经验 获得超6个赞
在servlet填充Response的时候,做JSON格式的数据转换
使用的类是net.sf.json.JSONObject,传入response对象和返回的显示类,修改response,返回前台JSON格式数据
代码:
/**
- 以JSON格式输出
- @param response
*/
protected void responseOutWithJson(HttpServletResponse response,
Object responseObject) {
//将实体对象转换为JSON Object转换
JSONObject responseJSONObject = JSONObject.fromObject(responseObject);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.append(responseJSONObject.toString());
logger.debug("返回是\n");
logger.debug(responseJSONObject.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}
添加回答
举报