SpringMVC之JSON工具:Jackson Gson 和fastjson通过JSON工具来解决文字乱码和时间格式问题——通过JSON工具生成JSON

news2024/11/22 9:34:24

什么是Json?

JSON:JavaScript Object Notation+JS对象

它是一种轻量级的数据交换格式JSON(当前是交互的顶流),它自身具有独立的编程格式,它的特点是简洁和清晰,Json的存在大大改造了网络传输的速率。

注意:在js中所支持的任何类型都可以通过Json来表示

Json语法格式

1:由键值对来表示对象

2:各数据之间通过逗号隔开

3:{}大括号内是对象

4:【】括号内是数组

Json与JS之间是什么关系?

学过Java的同学都知道一个方法叫做tostring,JSON与JS的关系,就可以通过这种方法来实现,

JSON就是JS对象的tostring。通过JSON来修改JS的输出内容。

JSON目前最流行的三种处理工具

1:Jackson  (流行)

2:Gson

3:Fastjson  (时常会出现BUG)

使用JSON前,必须先要在项目中导入JSON所使用的依赖在Maven项目的pom.xml文件中进行设置

1:Jackson

<dependency>            
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.2</version>
</dependency>

2:Gson

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>

3:Fastjson

        <dependency>
            <groupId>com.alibaba/groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>

JSON与JS之间相互转换的方法:

1:将JSON对象转化成JS对象

var obj = JSON.parse('{"name": "不想睡醒的梦", "sex": "男"}')

// 结果是:{name: '不想睡醒的梦', sex: '男'}

2:将JS对象转换成JSON

var json = JSON.stringify({name: '不想睡醒的梦', sex: '男'})

//  结果:'{"name": "不想睡醒梦", "sex": "男"}'

通过Jackson来实现字符格式出现乱码的情况

之前的博客有讲过当SpringMVC中出现文字输出内容乱码的情况

在Maven项目中有这样的一串代码

    @RequestMapping("/book3")
    @ResponseBody
    public String demo3(){
        return "不想睡醒的梦🐎";
    }

 1:通过修改参数来将乱码修改成utf-8格式

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

2:通过Maven项目中的SpringMVC配置文件对JSON代码进行全局文字格式的设置

注意:在配置文件中进行设置,可以一劳永逸不需要在进行其他的配置

    <mvc:annotation-driven >
        <mvc:message-converters register-defaults="true">
            <!--通过json来设置文字格式一劳永逸-->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"></constructor-arg>
            </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"></property>
                    </bean>
                </property>
            </bean>
    </mvc:annotation-driven >

输出结果:

文字得到正常的输出,上面是JSON交互的两种方法,除此之外还有很多方法 

通过JSON实现时间格式的正确表达

案例代码:访问后端数据,输出时间

    @RequestMapping(value = "/date")
    @ResponseBody
    public Date data(){
        Date date = new Date();
        return date;
    }

网页输出结果:一串数字

一串数字有一个官方的名称叫做时间戳

时间戳

我们想要的结果是当前的时间但是时间戳只是一串数字,对于我们并没有很大的用处

下来将通过JSON工具将时间戳转化成我们所能够理解的时间格式

一:Jackson

 1:注解@JsonFormat

位置可以方法属性的上面,也可以放在生成的get方法上面

写法一:

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date publshdata ;

 写法二:

    @JsonFormat(pattern = "yyyy-MM-dd")
    public Date getPublshdata() {
        return publshdata;
    }

输出结果

 2:配置文件解决时间格式(与上面字符的配置文件大同小异)

   <mvc:message-converters>       
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" id="httpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                            <bean class="java.text.SimpleDateFormat">
                                <constructor-arg name="pattern" value="yyyy-MM-dd"></constructor-arg>
                            </bean>
                        </property>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>

3:通过ObjectMapper来实现时间格式的修改 

@RequestMapping(value = "/date")
    @ResponseBody
    public String data() throws Exception{

        ObjectMapper mapper = new ObjectMapper();

        //关闭时间戳功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //设置一个时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //将上面的时间格式添加到对象中
        mapper.setDateFormat(sdf);
        Date date = new Date();
        //调用writeValueAsString,将指定的对象转换成json内容
        String s = mapper.writeValueAsString(date);
        return s;
    }

二;Gson

注意:当你的maven项目中使用gson时,你需要将Jackson中的依赖删除掉,因为在Spring框架中,框架会优先使用Jackson的依赖,所以会优先加载Jackson依赖中的Httpmessageconvert,然后才会加载gson中的Httpmessageconvert依赖,所以两种交互依赖能同时出现,但是依赖的优先级顺序不同。
 

Maven项目中的配置代码:

<context:component-scan base-package="d1"></context:component-scan>
    <mvc:annotation-driven >
        <mvc:message-converters>
            <ref bean="httpMessageConverter"></ref>
        </mvc:message-converters>
 </mvc:annotation-driven>
    <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter" id="httpMessageConverter">
        <property name="gson">
            <bean class="com.google.gson.Gson" factory-bean="gsonBuilder" factory-method="create"></bean>
        </property>
    </bean>
    <bean class="com.google.gson.GsonBuilder" id="gsonBuilder">
        <property name="dateFormat" value="yyyy-MM-dd"></property>
    </bean>

三:Fastjson

配置文件:

    <mvc:annotation-driven>
        <mvc:message-converters>
            <ref bean="httpMessageConverter"></ref>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" id="httpMessageConverter">
        <property name="fastJsonConfig">
            <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
                <property name="dateFormat" value="yyyy-MM-dd"></property>
            </bean>
        </property>
    </bean>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg音视频解码和渲染流程

背景&#xff1a; 随着游戏娱乐等直播业务的增长&#xff0c;在移动端观看直播的需求也日益迫切。但是移动端原生的播放器对各种直播流的支持却不是很好。Android 原生的 MediaPlayer 不支持 flv、hls 直播流&#xff0c;iOS 只支持标准的 HLS 流。本文介绍一种基于 ffplay 框…

挑选销售自动化工具应该关注什么功能?

销售自动化可以极大地提高你的生产力和效率&#xff0c;每周都为你节省时间。这样&#xff0c;你就可以把更多的时间用于完成交易&#xff0c;而减少用于行政任务的时间。市面上的销售自动化工具有很多&#xff0c;作为一般经验法则&#xff0c;以下是销售自动化工具中需要寻找…

智能家居Homekit系列一智能插座

WiFi智能插座对于新手接触智能家居产品更加友好&#xff0c;不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷&#xff0c;智能插座就是其中之一&#xff0c;比如外出忘记关空调&#xff0c;可以拿起手机远程关闭。 简单说就是&#xff1a;插座可以连接wi…

【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for wx:key(十二)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

Web前端学习:四 - 练习

三九–四一&#xff1a;百度页面制作 1、左右居中&#xff1a; text-align: center; 2、去掉li默认的状态 list-style: none; li中有的有点&#xff0c;有的有序&#xff0c;此代码去掉默认状态 3、伪类&#xff1a;hovar 一般显示为color: #0f0e0f&#xff0c; 当鼠标接触时…

【JAVA程序设计】【C00107】基于SSM(非maven)的民宿短租管理系统——有文档

【C00107】基于SSM&#xff08;非maven&#xff09;的民宿短租管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的民宿短租管理系统分为二种用户&#xff1a;系统管理员、用户 管理员角色包含以下功能&#xff1a; 用户管理、客房…

本地新项目上传到git的详细步骤

前提&#xff1a;你本地的项目目录里要记得添加.gitignore忽略文件&#xff0c;免得把一些无用的文件提交&#xff0c;内容如下&#xff0c;可直接粘贴&#xff1a; # Created by .ignore support plugin (hsz.mobi) ### Java template # Compiled class file *.class# Log fi…

Python不同版本之间的切换方法

在使用Python的过程中难免会遇到不同的项目使用不通同的Python环境&#xff0c;这就引出Python环境的切换问题 这篇文章以3.11.0与3.10.10之间的版本切换为列讲述 首先我自己的电脑上同时安装了这两个版本的Python&#xff0c;并且都已经配置了环境变量 1.两个版本的Python …

cast提前!最简单有效的神经网络优化方法,没有之一!

做优化有时候真的很头疼&#xff0c;绞尽脑汁的想怎么做算法等价&#xff0c;怎么把神经网络各层指令流水起来&#xff0c;在确保整网精度的同时&#xff0c;又有高性能。 但有时做了半天&#xff0c;却发现流水根本就流不起来&#xff0c;总是莫名其妙地被卡住。 真的是一顿…

[Java多线程 1] 多线程基础

在Java 技术中&#xff0c;多线程依旧是一个离不开的话题&#xff0c;掌握多线程才能对一些高并发技术理解透彻。同时多线程也需要有一定的操作系统基础&#xff0c;在其理论上进行学习&#xff0c;会对调度情况、线程情况有更多的了解。当然这一块也常常作为Java面试的重点&am…

HNU工训中心:元器件及测量基础实验报告

工训中心的牛马实验 1.实验目的 1.熟悉测量验证常用元器件参数、 并采用替代法(测量回路电流)测量其伏安特性的方法。 2.熟悉测量误差及减小测量误差注意事项 2.实验仪器和器材 1.实验仪器. 直流稳压电源型号:IT6302 台式多用表型号:UT805A 2.实验( 箱)器材 电路实验箱…

针对序列级和词元级应用微调BERT(需修改)

对于序列级和词元级自然语言处理应用&#xff0c;BERT只需要最小的架构改变&#xff08;额外的全连接层&#xff09;&#xff0c;如单个文本分类&#xff08;例如&#xff0c;情感分析和测试语言可接受性&#xff09;、文本对分类或回归&#xff08;例如&#xff0c;自然语言推…

sdut pta查找表

7-1 电话聊天狂人 给定大量手机用户通话记录&#xff0c;找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N&#xff08;≤105&#xff09;&#xff0c;为通话记录条数。随后N行&#xff0c;每行给出一条通话记录。简单起见&#xff0c;这里只列出拨出方和接…

SpringBoot:SpringBoot整合Junit 和 MyBatis(3)

SpringBoot整合Junit 和 MyBatis1. SpringBoot整合Junit2. SpringBoot整合MyBatis2.1 定义SpringBoot项目2.2 定义dao接口2.3 定义service层2.4 定义controller层2.5 配置yml/yaml文件2.6 postman测试1. SpringBoot整合Junit 在com.example.service下创建BookService接口 publ…

华为OD机试题,用 Java 解【两数之和绝对值最小】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

面向对象拓展贴

1. 类和对象的内存分配机制 1.1 分配机制  Java 内存的结构分析 栈&#xff1a; 一般存放基本数据类型(局部变量)堆&#xff1a; 存放对象(Cat cat , 数组等)方法区&#xff1a;常量池(常量&#xff0c;比如字符串)&#xff0c; 类加载信息示意图 [Cat (name, age, price)]…

安全狗出席2023中国网络和数据安全产业高峰论坛

2月23日&#xff0c;由工业和信息化部、四川省人民政府主办的“2023中国网络和数据安全产业高峰论坛”在成都顺利开幕。 作为国内云原生安全领导厂商&#xff0c;安全狗也出席了此次活动。 在此次活动中&#xff0c;“2022年网络安全技术应用试点示范项目授牌仪式”环节引起业…

TwinCAT3第三方伺服电机——汇川SV660N使用

目录 一、第三方伺服在TC3中配置和使用 二、xml文件拷贝 ​编辑 三、IO中扫描伺服 四、工程测试 五、汇川伺服参数设置说明 一、第三方伺服在TC3中配置和使用 在倍福控制系统中使用第三方伺服可以参见本人另一篇博客&#xff0c;有详细教程说明。本文仅仅对SV660N伺服设置…

表格形式的Sarsa与Q_learning算法

环境如下&#xff1a; 这是一个简单的环境&#xff0c;绿色方块代表终点&#xff0c;白色方块代表可行点&#xff0c;灰色方块代表陷阱 用Sarsa算法和Q_learning算法训练得到value表格 代码如下&#xff1a; (jupyter notebook上的代码&#xff0c;所以顺序看起来有点儿奇怪) …

【博学谷学习记录】超强总结,用心分享丨人工智能 Linux常用软件安装 CenOS 7 arm 安装 MySQL8

目录环境说明虚拟机安装MySQL下载步骤1.卸载系统自带的mariadb-lib2.上传安装包并解压3.按顺序安装4.初始化数据库5.目录授权&#xff0c;否则启动失败6.启动msyql服务7.查看msyql服务的状态8.在/var/log/mysqld.log下查看临时密码9.用临时密码登录到数据库10.执行下列mysql命令…