为了账号安全,请及时绑定邮箱和手机立即绑定

java怎么从HttpServletResponse里面获取返回给前端json数据?

java怎么从HttpServletResponse里面获取返回给前端json数据?

阿波罗的战车 2019-02-16 22:03:20
1,现在需要从过滤器里面获取HttpServletResponse,再从HttpServletResponse获取返回给前端的json数据。 2,场景,当用户发生了增删改的操作的时候,获取用户操作的url,参数,然后根据操作是否成功,若是成功,那么将用户的这些操作日志数据插入数据库,用户操作的url,参数可以从ServletRequest里面获取,但是用户操作是否成功需要根据HttpServletResponse里面返回给前端json数据里面的一个key来判断。但是现在不知怎么获取json数据。3,`public class LogFilter extends AdviceFilter { @Override public void afterCompletion(ServletRequest request, ServletResponse response, Exception exception) throws Exception { HttpServletRequest r = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; System.out.println(r.getMethod()); Map<String, String[]> map = request.getParameterMap(); Map<String ,String > resultMap=new LinkedHashMap<>(); for (Map.Entry<String, String[]> me : map.entrySet()) { String paramName = me.getKey(); resultMap.put(paramName,request.getParameter(paramName)); } System.out.println("resultMap"+resultMap); System.out.println(r.getRequestURI()); //就是这里不知道怎么获取HttpServletResponse里面的json ServletOutputStream out=res.getOutputStream(); } }`
查看完整描述

5 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

response是采用缓存输出流的方式回写,当执行到HandlerInterceptor.afterCompletion时,大部分数据可能已经写回的客户端, 没有办法获得了. 可以尝试用Servlet Filter, 把里面的response替换成自己的实现, 但要注意的是如果不用流,而是保留在内存里,那么以性能和内存都要小心处理才行.

查看完整回答
反对 回复 2019-03-01
?
MMMHUHU

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

查看完整回答
反对 回复 2019-03-01
?
哈士奇WWW

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();  
    }  
}  

}

查看完整回答
反对 回复 2019-03-01
?
开满天机

TA贡献1786条经验 获得超13个赞

我现在也是在这个问题.求助呀

查看完整回答
反对 回复 2019-03-01

添加回答

代码语言

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信