近期由于项目的改动变更,在使用springmvc和springboot测试的时候发现一个有趣的现象

1.springmvc的controller使用@ResponseBody返回的仅仅是json格式的字符串,如果要在页面使用json对象还需要通过转换才能得到json对象,这样才能使用相关的属性或者做遍历

 1 @RequestMapping("statisticsByYear.do")
2 @ResponseBody
3 public String statisticsYear(String type,String startYear,String endYear){
4 List<StatisticsYearDTO> yearDTOList= new ArrayList<>();
5 StatisticsYearDTO year1= new StatisticsYearDTO(2015,12501.5);
6 StatisticsYearDTO year2= new StatisticsYearDTO(2016,22501.5);
7 StatisticsYearDTO year3= new StatisticsYearDTO(2017,32501.5);
8 StatisticsYearDTO year4= new StatisticsYearDTO(2018,52501.5);
9 StatisticsYearDTO year5= new StatisticsYearDTO(2019,92501.5);
10 yearDTOList.add(year1);
11 yearDTOList.add(year2);
12 yearDTOList.add(year3);
13 yearDTOList.add(year4);
14 yearDTOList.add(year5);
15 String s=null;
16 ObjectMapper map= new ObjectMapper();
17 try {
18 s=map.writeValueAsString(yearDTOList);
19 } catch (JsonProcessingException e) {
20 e.printStackTrace();
21 }
22
23 return s;
24 }

因为这里我是做业务测试,所以使用了json的转换工具,并没有返回对象集合,大家不必纠结这一点

return "[{\"year\":2015,\"totalMoney\":12501.5},{\"year\":2016,\"totalMoney\":22501.5}, " +
"{\"year\":2017,\"totalMoney\":32501.5},{\"year\":2018,\"totalMoney\":52501.5}, " +
"{\"year\":2019,\"totalMoney\":92501.5}]";

以上是实际返回的字符串格式

在页面显示的时候我使用ajax得到数据

1 $.getJSON("statisticsByYear.lovo",{},function (data) {
2 alert(data);
3 var jsons=jQuery.parseJSON(data)
4 $.each(jsons,function (i,e) {
5 months.push(e.year+"年");
6 charges.push(e.totalMoney);}

这里得到的数据并非json对象,而是json字符串,而且需要转换成json对象才能去遍历

下面是显示的内容打印

在这里可以看到这仅仅是json格式的字符串

后续还需要我转换成json格式的对象才能使用遍历

1  var jsons=jQuery.parseJSON(data)

所以才有了以上这行代码

在springboot项目中的controller里面我并未做任何修改,这里贴上代码

 1  @RequestMapping("statisticsByYear")
2 @ResponseBody
3 public String statisticsYear(String type,String startYear,String endYear){
4 /*这里需要去其他服务器远程调用,做为测试我写了一些假数据*/
5 List<StatisticsYearDTO> yearDTOList= new ArrayList<>();
6 StatisticsYearDTO year1= new StatisticsYearDTO(2015,12501.5);
7 StatisticsYearDTO year2= new StatisticsYearDTO(2016,22501.5);
8 StatisticsYearDTO year3= new StatisticsYearDTO(2017,32501.5);
9 StatisticsYearDTO year4= new StatisticsYearDTO(2018,52501.5);
10 StatisticsYearDTO year5= new StatisticsYearDTO(2019,92501.5);
11 yearDTOList.add(year1);
12 yearDTOList.add(year2);
13 yearDTOList.add(year3);
14 yearDTOList.add(year4);
15 yearDTOList.add(year5);
16 String s=null;
17 ObjectMapper map= new ObjectMapper();
18 try {
19 s=map.writeValueAsString(yearDTOList);
20 } catch (JsonProcessingException e) {
21 e.printStackTrace();
22 }
23 return s;
24 }

返回的s是

1  "[{\"year\":2015,\"totalMoney\":12501.5},{\"year\":2016,\"totalMoney\":22501.5},
2 {\"year\":2017,\"totalMoney\":32501.5},{\"year\":2018,\"totalMoney\":52501.5},
3 {\"year\":2019,\"totalMoney\":92501.5}]";

由于偷懒新部署的springboot项目里 并没有修改页面的代码,在测试的发现页面报错点击报错信息的时候发现了这个问题

这里提示json有问题,我注释掉

1 var jsons=jQuery.parseJSON(data)

页面就回复正常了,一开始我以为我是使用了什么前端框架的原因,但是反过来一想就是一个简单的html页面除了echarts什么都没有

最后我在打印返回的数据的时候发现了问题

在这里大家可以看到返回的页面的其实是json对象了并不是和前面一样是字符串,所以我们在使用转json的时候报错了

由于我的页面是放在静态资源下面的排除模板技术的影响,这其中的原因我认为是springboot对底层做了封装,在返回json格式的字符串的时候自动将其转换成了json对象

可能会有朋友认为你直接返回对象或者list等集合不就可以了吗?

但是如果去远程访问其他服务器的话,其他服务器给我们的是string类型的json格式数据我们还需要去建立dto等对象来做解析还原,然后再传输到页面去,

如果我们和对方约定好返回的数据格式则不需要再去建立相应的dto,省去了中间环节提高了效率。

小记SpringMVC与SpringBoot 的controller的返回json数据的不同的更多相关文章

  1. SpringBoot 03_利用FastJson返回Json数据

    自上一节:SpringBoot 02_返回json数据,可以返回json数据之后,由于有些人习惯于不同的Json框架,比如fastjson,这里介绍一下如何在SpringBoot中集成fastjson ...

  2. SpringMVC 配置.html拦截时,返回JSON数据时出现406错误解决方案

    [说明]在SpringMVC框架的使用中常常会使用@ResponseBody注解,修饰"处理器"(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回 ...

  3. springMVC返回json数据乱码问题及@RequestMapping 详解

    原文地址:https://blog.csdn.net/u010127245/article/details/51774074 一.@RequestMapping RequestMapping是一个用来 ...

  4. springMVC返回json数据乱码问

    在springMVC controller中返回json数据出现乱码问题,因为没有进行编码,只需要简单的注解就可以了 在@RequestMapping()中加入produces="text/ ...

  5. SpringBoot 02_返回json数据

    在SpringBoot 01_HelloWorld的基础上来返回json的数据,现在前后端分离的情况下多数都是通过Json来进行交互,下面就来利用SpringBoot返回Json格式的数据. 1:新建 ...

  6. 请求*.html后缀无法返回json数据的问题

    在springmvc中请求*.html不可以返回json数据. 修改web.xml,添加url拦截格式.

  7. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  8. idea+springmvc+spring+mybatis+maven整合返回json数据webapi

    首先看一张目录结构图: : 创建步骤: 1.创建maven  webapp工程, 创建完后的目录结构为: 2.添加项目依赖(添加jar包) 需要的jar包: spring-webmvc, spring ...

  9. 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

随机推荐

  1. C# 串口开发

    在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形.温度等).用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 - ...

  2. docker下gitlab(redis)安装配置使用(完整版)

    ps:如果是云主机,需添加安全组开放相应端口(关联相应实例),防火墙开放端口或直接关闭 https://www.jianshu.com/p/080a962c35b6 将其中external_url换为 ...

  3. Python - 面向对象编程 - 什么是 Python 类、类对象、实例对象

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html Python 类 类定义语法 最简单的类定义看起来像这样 class ClassName: ...

  4. Android WorkManager 定时任务

    App有时可能需要定期运行某些工作.例如,可能要定期备份数据.上传信息到服务器,定期获取新的内容等等. 在app运行期间,我们使用Handler也可以完成定期的功能.在这里我们介绍WorkManage ...

  5. pixhawk入门

    PX4 是软件名称,代码约30万行 Pixhawk是硬件名称 MissionPlanner是地面站名称 常见术语: WP:Way Point 航电 geofence:地理围栏 Rally Point: ...

  6. React事件处理、收集表单数据、高阶函数

    3.React事件处理.收集表单数据.高阶函数 3.1事件处理 class Demo extends React.Component { /* 1. 通过onXxx属性指定事件处理函数(注意大小写) ...

  7. 【进阶之路】持续集成、持续交付与持续部署(CI/CD)

    由来 记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:"南橘,CI/CD有没有研究过?" 我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我 ...

  8. 服务器安装CentOS7.9系统(U盘启动方式)

    一.安装环境 机房的华为GPU服务器,型号G2500,8张P4显卡,需要安装最小化的CentOS7.9操作系统,利用U盘启动的方式进行安装. 二.安装说明 虽然本环境是GPU服务器,但是安装方式同样适 ...

  9. python 修改图像大小和分辨率

    1 概念: 分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数.比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x108 ...

  10. Appium问题解决方案(9)- Original error: Failed to launch Appium Settings app: Condition unmet after 5090 ms

    背景 执行代码报错 解决方法 该问题并不常见,主要是手机操作系统的问题 程序无法无法自动打开appiumsettings,那么我们可以手动打开appiumsettings服务(程序没有界面,会出现打开 ...