json的使用

我们广义上说的后端开发提供接口,其实指的是我们在Controller层定义的域名:端口号/请求名
前端获取这个请求,去赋给比如表单的action,获取相应的结果集并展示。

json:轻量级的数据交换格式

json采用键值对的形式来保存JavaScript的数据,形式类似于:
var json = ‘{“name”:“wang”,“age”:“13”}’;

如果针对一个类进行注解@RestController,那么这个控制类下的所有方法返回的都是字符串,而不是用视图解析器返回视图

后端返回给前端的JSON对象乱码问题

单独解决:

    @RequestMapping(value = "j1",produces = "application/json;charaset=utf-8")

配置解决,通过在Spring核心配置文件中的注解驱动来解决:

    <mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="utf-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven>

前台如何进行javascript对象与json对象转换

var obj = JSON.parse( ‘{“name”:“wang”,“age”:“13”}’);
var json = JSON.stringify({name:‘wang’,age:‘13’});

这个JSON是html自带的一个对象

后台如何进行java对象与json对象转换

其实从本质上来说,json并不是一种新的数据格式,它就是有特定格式的字符串,只不过经过了转换。
测试Json的时候,给控制类上加一个@RestController,防止返回字符串被视图解析器解析成视图返回了。
或者在测试的方法上加一个@ResponseBody,可以有同样效果,但是这个针对单个方法。

一)、使用jackson的方式进行Json数据操作

使用jackson必须要导入依赖:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version>
</dependency>

使用方法如下:
创建使用对象ObjectMapper mapper = new ObjectMapper();
然后mapper.writeValueAsString(object);就可以返回一个JSON格式的字符串
返回前台可以显示。

    @RequestMapping("/j1")
//    @ResponseBody  写上这个注解,这个方法就不会走视图解析器,就会直接返回一个字符串public String Json01(){//创建一个对象User user = new User("wang", 13, "男");String str = "";ObjectMapper objectMapper = new ObjectMapper();try {str = objectMapper.writeValueAsString(user);} catch (JsonProcessingException e) {e.printStackTrace();}return str;//return JsonUtils.getJson(user);}

由于JSON的使用非常频繁,而如果每次使用都要不停的去创建ObjectMapper有点影响阅读,因此把它写到工具类中。

package com.wang.utils;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;import java.text.SimpleDateFormat;
import java.util.Date;public class JsonUtils {public static String getJson(Object object){return getJson(object,"yyyy-MM-dd HH:mm:ss");}public static String getJson(Object object,String dateFormate) {ObjectMapper mapper = new ObjectMapper();//关闭时间戳定义时间格式mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);SimpleDateFormat sdf = new SimpleDateFormat(dateFormate);mapper.setDateFormat(sdf);String s = null;try {s = mapper.writeValueAsString(object);} catch (JsonProcessingException e) {e.printStackTrace();}return s ;}
}

以上是包含了目前两个方法

  • 第一个方法调用了第二个方法,不影响其传入参数的变化。
  • 第二个主要是针对时间的操作,先是定义了时间的显示方式,更改了时间戳的显示,然后根据传入的时间格式返回相关字符串。

使用工具类进行Json的传递:

    @RequestMapping(value = "j2")public String Json02() throws JsonProcessingException {User user1 = new User("梁志斌", 13, "男");User user2 = new User("卢崛", 13, "女");User user3 = new User("李元浩", 13, "男");User user4 = new User("孙亚龙", 13, "男");List<User> userlist = new ArrayList<User>();userlist.add(user1);userlist.add(user2);userlist.add(user3);userlist.add(user4);
//        ObjectMapper objectMapper = new ObjectMapper();
//        String str = objectMapper.writeValueAsString(userlist);return JsonUtils.getJson(userlist);}

二)、使用FastJson的方式进行数据操作

这个是阿里的工具类,同样也需要导入相关依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version>
</dependency>

使用方法也非常简单,直接JSON.toJSONString(Object)就可以获得一个Json格式字符串

    //    fastjson的使用@RequestMapping("/j4")public String Json04(){User user1 = new User("梁志斌", 13, "男");User user2 = new User("卢崛", 13, "女");User user3 = new User("李元浩", 13, "男");User user4 = new User("孙亚龙", 13, "男");List<User> userlist = new ArrayList<User>();userlist.add(user1);userlist.add(user2);userlist.add(user3);userlist.add(user4);String s = JSON.toJSONString(userlist);return s;}@RequestMapping("/j5")public String Json05(){User user1 = new User("梁志斌", 13, "男");return JSON.toJSONString(user1);}@RequestMapping("/j6")public String Json06(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return JSON.toJSONString(sdf.format(new Date()));}

2020-08-22 SpringMVC中Json使用、后端返回给前端的JSON对象乱码问题、前台对Json数据格式的操作、Jackson以及FastJson使用相关推荐

  1. springmvc中Controller方法的返回值

    1.1 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 1.2 返回void 在controller方法形参 ...

  2. SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码

    问题: 后台在springMVC中使用hibernate-validator做参数校验的时候(validator具体使用方法见GOOGLE),用properties文件配置了校验失败的错误信息.发现回 ...

  3. SpringMVC中接收数据和返回数据

    SpringMVC接收数据,并输出到控制台,首先我们写一个User实体类 package com.zhiying.pojo;public class User {private int id;priv ...

  4. vue项目中实现下载后端返回的excel数据表格

    查看更多资源 1. 案例简介: vue项目中,客户端需要实现以excel表格形式下载数据,后端为java,接受请求 >> 读取数据库 >> 生成excel >> 返 ...

  5. python解析json_python3 解析 json 字符串并返回支持属性访问的对象

    目的 将任意一个 json 字符串,转换为 python 的 object 对象,转换后支持使用属性访问. 方法 json 解析命令行使用的 argparse,可以任意规定命令行关键字,并能使用属性访 ...

  6. vue后端返回数据流 前端导出下载xls文件

    后端返回数据流, 前端导出下载xls文件 export function exportMethod() {axios({method:'get',url: url+'params',responseT ...

  7. 继php使用curl爬取数据接口将字符串json转为json再讲返回的html页面取出图片路径和描述插入json数组中

    https://blog.csdn.net/weixin_45237065/article/details/109726773 爬取接口之前需要能够访问到接口 访问接口需要登录成功后的cookie c ...

  8. springmvc中处理器(控制器)能够返回的类型及处理器默认能够接受的参数类型

    一.处理器(控制器)能够返回的类型: 1.ModelAndView:把数据模型和试图设置到ModelAndView对象中 2.void:把数据类型和视图设置到request域中 3.String:返回 ...

  9. 后端返回list前端如何处理_前端、后端、全栈是什么?薪资前景如何?

    随着信息产业的迅猛发展,IT行业人才需求量也在逐年扩大. 据国内权威数据统计,未来五年,我国信息化人才总需求量高达1500万-2000万人.其中"软件开发"."网络工程& ...

最新文章

  1. PostgreSQL和Kingbase中设置search_path
  2. 运维自动化之基于python语言的文字界面的运维管理软件
  3. ubuntu安装spark-2.4.7-bin-without-hadoop
  4. HDU 5176 The Experience of Love 带权并查集
  5. 与ceph的区别_Ceph分布式存储高性能设计
  6. 进程,线程和协程 并行与并发
  7. C++ 数据结构,vector与栈介绍
  8. 连通性1 求无向图的low值
  9. 简单实用的带引脚保护的RS232驱动电路
  10. 【DM】DMHS的安装部署及DM7的二节点同步
  11. FinalReport连接MYSQL数据库失败经验分享
  12. 前端项目使用阿里巴巴icon font的具体过程
  13. 辅助功能 AccessibilityService笔记
  14. GIS大讨论(九):GIS专业就业之职位篇
  15. UNETR 论文精解
  16. 《白帽子讲Web安全 》 随手记(二)
  17. 电子漫画系列更新9张美图,共计47张,收藏收藏!
  18. 敢于追求梦想 人生才会辉煌 月薪19000
  19. 深度linux怎么运行windos软件,在深度Deepin 20系统中安装常见Windows应用软件的通用方法...
  20. Signal(信号)

热门文章

  1. linux 触控板 不识别,linux – 未检测到触控板
  2. 【经典题】跟着凡人玩转C语言之快速排序算法
  3. 【Unity项目】仿《空洞骑士》项目
  4. ath9k驱动内的数据发送过程
  5. isotope自动布局
  6. 互联网晚报 | 小米公布“汽车设计文件泄密”事件处理结果;蔚来回应最高超10万元降价促销;苹果发布2023财年第一财季财报...
  7. 全开源办公开发平台——手机移动端APP功能简介
  8. 神经网络学习----如何利用训练好的神经网络模型进行预测
  9. Linux服务器取证研究,linux系统取证
  10. 中文Analytics Intelligence 问答系统 (一)