标签:writer ResponseBody json result 字符串 response setHeader
今天在改一个bug
情况:
在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 。
在正常情况下,从其它API 返回给前端的结果都是json字符串,前端可以正确解析
但遇到一些异常的情况,返回给前端的结果却是json对象数据,key少了双引号,前端无法正确解析
从一开始调试到后面网上查找各种资料,都难以找到根源
直到后面看到一篇文章说到write() 方法对结果的处理问题,才有所悟,并调试确定了根源
1 private void responseResult(HttpServletResponse response, Result<?> result) { 2 response.setCharacterEncoding("UTF-8"); 3 response.setHeader("Content-Type", "application/json"); 4 response.setHeader("Access-Control-Allow-Credentials", "true"); 5 response.setHeader("Access-Control-Allow-Methods", "GET, POST"); 6 response.setHeader("Access-Control-Allow-Origin", "*"); 7 response.setHeader("Access-Control-Max-Age", "3600"); 8 // response.setHeader("Content-type", "application/json;charset=UTF-8"); 9 response.setStatus(HttpServletResponse.SC_OK); 10 response.setContentType("application/json;charset=UTF-8"); 11 // ServletOutputStream out = null; 12 PrintWriter writer=null; 13 try { 14 // JSON.toJSONString(result)要获取完整的json字符串,每一个字段都要有set和get方法,不然会缺少某个字段 15 // response.getWriter().write(JSON.toJSONString(result)); 16 writer=response.getWriter(); 17 // writer.write(result.toString()); 18 writer.write(JSON.toJSONString(result)); 19 writer.flush(); 20 } catch (IOException ex) { 21 logger.error(ex.getMessage()); 22 }finally { 23 if(writer!=null) { 24 writer.close(); 25 } 26 } 27 }
参考:
Spring的ResponseBody和RestController注解返回的json数据不是json字符串,而是json对象... https://blog.csdn.net/weixin_33890526/article/details/87167889
Object与json字符串的相互转换 https://blog.csdn.net/justry_deng/article/details/80780175
共同学习,共同进步,若有补充,欢迎指出,谢谢!
标签:writer,ResponseBody,json,result,字符串,response,setHeader 来源: https://www.cnblogs.com/dengguangxue/p/11249918.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。