ResponseBody和返回的json数据不是json字符串,而是json对象

 

今天在改一个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  

 

 

共同学习,共同进步,若有补充,欢迎指出,谢谢!

上一篇:[【java】]测试接口为什么返回404,将Controller改为RestConntroller问题成功解决!


下一篇:操作文件Excel(xlsx格式)