• SpringMVC学习|JSON讲解、Controller返回JSON数据、Jackson、JSON乱码处理、FastJson


    JSON讲解

    JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式,目前使用特别
    广泛。
    采用完全独立于编程语言的文本格式来存储和表示数据。
    简洁和清晰的层次结构使得 JSON成为理想的数据交换语言。
    易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
    在JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
    对象表示为键值对,数据由逗号分隔
    花括号保存对象
    方括号保存数组
    JSON 键值对是用来保存 JavaScript 对象的一种方式,和JavaScript 对象的写法也大同小异键/值对组合中的键名写在前面并用双引号"”包裹,使用冒号:分隔,然后紧接着值:
    {"name":"QinJiang"}

    {"age":"3"}

    {"sex":"男"}

    前后端分离时代,前端和后端的数据交互用json交换格式。

    理解JSON的demo

    创建一个html页面,定义一个JavaScript的对象,我们可以将这个js对象转换为json对象,也可以将json对象转换为js对象

    访问这个html页面,发现json对象就是普通的字符串,js对象是可展开的。

    Controller返回JSON数据

    Jackson

    Jackson应该是目前比较好的json解析工具了
    当然工具不止这一个,比如还有阿里巴巴的 fastjson 等等。

    我们这里使用Jackson,在上一篇文章环境的基础上使用它需要导入它的jar包;还有lombok依赖。

    编写一个User实体类

    编写一个Controller,然后在方法上加@ResponseBody注解,这样返回的内容就不会走视图解析器,而是直接返回一个字符串。

    加lib,添依赖,配Tomcat

    访问这个Controller方法的路由,发现返回了一个User的普通字符串,但是有乱码。

    我们调用jackson的方法,新建一个ObjectMapper对象,调用这个对象的writeValueAsString的方法将我们创建的一个User对象,转换为JSON格式的字符串,并返回它。

    再调用这个Conroller的方法,发现返回的是一个JSON格式的字符串,也有乱码。

    JSON乱码处理

    发现出现了乱码问题,我们需要设置一下他的编码格式为utf-8,以及它返回的类型。通过@RequestMaping的produces属性来实现,修改下代码

    再次调用Controller的这个方法,发现乱码问题解决。

    乱码统一解决
    上一种方法比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过Spring配置统一指定,这样就不用每次都去处理了!
    我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置!

    在有映射器、适配器、视图解析器配置的那个springmvc-servlet.xml的那个配置文件中添加JSON乱码问题解决的配置。

    @RequestMapping就不用加刚才的东西了

    再访问,乱码问题也一样被解决。

    理解Jackson的小demo

    再创建一个Controller的方法,创建许多User对象,都加入到一个List集合中,我们依然调用以前的方法,可以直接将这个集合转换为JSON格式的字符串。

    访问该方法,看到返回结果。

    关于返回时间的格式问题

    新建一个时间对象,用ObjectMapper对象转换为JSON对象返回,默认为时间戳格式

    显示出来是时间戳格式,不好理解。

    设置一个SimpleDateFormat的对象,定义时间格式为"yyyy-MM-dd HH:mm:ss,再转化为JSON对象时,先用这个对象的format方法嵌套一层再转换。

    这种时间格式返回更加清晰易懂。

    还有另外一种该法。让ObjectMapper对象的默认把时间转换成时间戳的方式关闭,然后自定义一个日期的格式SimpleDateFormat对象,设置日期格式,将ObjectMapper对象通过setDateFormat方法设置它的日期转换格式,然后正常调用这个对象的转换JSON方法,加入日期对象即可。

    我们把这个转换JSON的操作定义成一个JsonUtils方法类,方便我们后续使用

    再需要将对象转换成JSON字符串时,调用这个工具类即可。

    FastJson

    fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法很多,最后的实现结果都是一样的。

    导入fastjson的依赖

    它的各种方法。

  • 相关阅读:
    安全防御设备——防火墙总结【2】
    POC & EXP | woodpecker插件编写
    两相障碍问题的FEM近似及其后验误差估计(Matlab代码实现)
    linux环境下利用线程池拷贝普通文件或目录(C语言实现)
    类与对象(十六)----封装encapsulation
    RADIUS协议基础原理
    在线工具推荐!能在线解决的问题,何必下载软件呢?
    华为OD 数列描述(100分)【java】A卷+B卷
    SpringBoot中bean的生命周期
    第 23 章 MySQL NDB Cluster 8.0
  • 原文地址:https://blog.csdn.net/weixin_73149966/article/details/132896621