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();
}
}
}
添加回答
舉報