Spring Boot 3.x特性-JSON(gson,jackson,json-b,fastjson)
系列文章目录
系列文章:Spring Boot 3.x 系列教程
文章目录
- 系列文章目录
- 前言
- 一、Jackson
- 二、Gson
- 三、JSON-B
- 四、Fastjson
前言
Spring Boot提供了与三个JSON
映射库的集成:
- Gson
- Jackson
- JSON-B
Jackson
是首选的默认库。
在Spring Boot 3.x- Servlet Web应用程序开发(Spring MVC)文中有介绍过:
Spring MVC使用
HttpMessageConverter
接口来转换HTTP
请求和响应。默认情况下是开箱即用,例如,对象可以自动转换为JSON
(通过使用Jackson
库)或XML
(如果可用,则使用Jackson XML
扩展;如果Jackson XML
扩展不可用,则使用JAXB
),默认情况下,字符串以UTF-8
编码。
Spring Boot自带的JSON
格式转换,HttpMessageConverter
实现有如下几种:
1.MappingJackson2HttpMessageConverter(默认)
2.JsonbHttpMessageConverter
3.GsonHttpMessageConverter
可以使用属性spring.mvc.converters.preferred-json-mapper
选择具体的josn
(jackson
,gson
,jsonb
)转换方式。
一、Jackson
Jackson
是spring-boot-starter-json
的一部分, 提供了Jackson
的自动配置。当Jackson
位于类路径中时,将自动配置ObjectMapper
。Spring Boot并且提供了几个配置属性,用于定制ObjectMapper
的配置。
当引入
spring-boot-starter-web
依赖时,同时包含了spring-boot-starter-json
。所以一般无需单独的引入。
下面例子使用默认的Jackson
,使接口输出内容为json
格式。
引入web
依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
新建接口:
@RestController
public class TestJsonController {@RequestMapping(value = "/user/detail")public User user() {return new User(1024l, "hello", "word");}@Data@AllArgsConstructorclass User implements Serializable {private Long id;private String firstName;private String lastName;}
}
访问接口输出以下内容:
无需任何的额外配置就可以集成Jackson
,这些都归根于Spring Boot的自动配置:
Spring MVC(客户端和服务器端)使用HttpMessageConverters
在HTTP
交换中协商内容转换。如果Jackson
位于类路径中,则已经获得了Jackson2ObjectMapperBuilder
提供的默认转换器,该转换器的实例已为你自动配置。
ObjectMapper
(XmlMapper
)实例(默认创建)具有以下自定义属性:
- MapperFeature.DEFAULT_VIEW_INCLUSION 禁用
- DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 禁用
- SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 禁用
你可以通过使用环境配置ObjectMapper
和XmlMapper
实例。Jackson
提供了一套广泛的开/关
特性,可用于配置其处理的各个方面。这些特性在6个枚举中描述(在Jackson
中),它们映射到环境中的属性:
枚举 | 属性 | 值 | 说明 |
---|---|---|---|
com.fasterxml.jackson.databind.SerializationFeature
|
spring.jackson.serialization.<feature_name>
|
true, false
|
序列化特性开关 |
com.fasterxml.jackson.databind.DeserializationFeature
|
spring.jackson.deserialization.<feature_name>
|
true, false
|
反序列化特性开关 |
com.fasterxml.jackson.core.JsonGenerator.Feature
|
spring.jackson.generator.<feature_name>
|
true, false
|
JsonGenerator 可切换特性开关
|
com.fasterxml.jackson.databind.MapperFeature
|
spring.jackson.mapper.<feature_name>
|
true, false
|
ObjectMapper 特性开关
|
com.fasterxml.jackson.core.JsonParser.Feature
|
spring.jackson.parser.<feature_name>
|
true, false
|
JsonParser 特性开关
|
com.fasterxml.jackson.annotation.JsonInclude.Include
|
spring.jackson.default-property-inclusion
|
always, non_null, non_absent, non_default, non_empty
|
定义在序列化中包含Java Bean 的哪些属性
|
常用属性配置:
# 属性命名策略,PropertyNamingStrategy常量,SNAKE_CASE驼峰转下划线
spring.jackson.property-naming-strategy=SNAKE_CASE
# @JsonFormat的格式转换
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#设置全局时区
spring.jackson.time-zone=GMT+8
#属性null值处理方式,非空才序列化
spring.jackson.default-property-inclusion=non_null
#枚举类SerializationFeature
#Date转换成timestamp
spring.jackson.serialization.write-dates-as-timestamps=true
#对象为null报错
spring.jackson.serialization.fail-on-empty-beans=true
#枚举类DeserializationFeature
#反序列化不存在属性时是否报错,默认true
spring.jackson.deserialization.fail-on-unknown-properties=false
#使用getter取代setter探测属性,如类中含getName()但不包含name属性与setName(),json输出包含name。默认false
spring.jackson.mapper.use-getters-as-setters=true
#枚举类JsonParser.Feature
#是否允许出现单引号,默认false
spring.jackson.parser.allow-single-quotes=true
二、Gson
当Gson
在类路径上时,会自动配置Gson Bean
。spring.gson.*
提供自定义配置属性。要获得更多的控制,可以使用一个或多个GsonBuilderCustomizer Bean
。
引入依赖,需要排除默认的jackson
依赖,然后加入gson
依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency>
常用配置
# 序列化Date对象时使用的格式。
spring.gson.date-format=yyyy-MM-dd HH:mm:ss
#是否禁用HTML字符转义,如'<','>'等。
spring.gson.disable-html-escaping=true
#是否在序列化过程中排除内部类。
spring.gson.disable-inner-class-serialization=false
#是否启用复杂映射键(即非原语)的序列化
spring.gson.enable-complex-map-key-serialization=false
#在序列化或反序列化时,是否排除所有没有\"Expose\"注释的字段
spring.gson.exclude-fields-without-expose-annotation=true
#在序列化和反序列化期间应用于对象字段的命名策略 FieldNamingPolicy
spring.gson.field-naming-policy=UPPER_CAMEL_CASE
#是否通过在输出前加上一些特殊文本来生成不可执行的JSON。
spring.gson.generate-non-executable-json=false
#是否对不符合RFC 4627的JSON进行宽容的解析。
spring.gson.lenient=false
# Long类型和long类型的序列化策略。LongSerializationPolicy
spring.gson.long-serialization-policy=DEFAULT
# 是否输出适合页面的序列化JSON以进行漂亮的打印。
spring.gson.pretty-printing=true
# 是否序列化空字段。
spring.gson.serialize-nulls=true
三、JSON-B
当JSON-B API
和实现在类路径上时,将自动配置一个Json Bean
。首选的JSON-B
实现是Eclipse Yasson
,它提供了依赖项管理。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.eclipse</groupId><artifactId>yasson</artifactId><version>2.0.4</version></dependency>
四、Fastjson
fastjson
是阿里巴巴的开源JSON
解析库,它可以解析 JSON
格式的字符串,支持将 JavaBean
序列化为 JSON
字符串,也可以从 JSON
字符串反序列化到 JavaBean
。
因为fastjson
不是Spring Boot官方默认的json
库,因此需要自定义HttpMessageConverter
,fastjosn
默认提供了跟spring集成的HttpMessageConverter
实现:FastJsonHttpMessageConverter
引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version></dependency>
public class FastJsonHttpMessageConverter extends AbstractHttpMessageConverter<Object> implements GenericHttpMessageConverter<Object> {}
所以只需要自动创建FastJsonHttpMessageConverter
,覆盖默认的HttpMessageConverter
。
@Configuration
public class FastJsonGlobalConfig {@BeanFastJsonHttpMessageConverter getconvers(){FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig jsonConfig = new FastJsonConfig();jsonConfig.setCharset(Charset.forName("UTF-8"));jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");converter.setFastJsonConfig(jsonConfig);converter.setDefaultCharset(Charset.forName("Utf-8"));return converter;}
}
还可以使用WebMvcConfigurer
方式配置:
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig jsonConfig = new FastJsonConfig();jsonConfig.setCharset(Charset.forName("UTF-8"));jsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");converter.setFastJsonConfig(jsonConfig);converter.setDefaultCharset(Charset.forName("Utf-8"));converters.add(0, converter);}
}
Spring Boot 3.x特性-JSON(gson,jackson,json-b,fastjson)相关推荐
- SoJpt Boot 2.3-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发
SoJpt Boot 2.3-3.8 发布了.SoJpt Boot 基于 JFinal 与 Spring Boot制作, 实现了 Spring Boot 与 Jfinal 的混合双打,使 Spring ...
- SoJpt Boot 2.2-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发
开发四年只会写业务代码,分布式高并发都不会还做程序员? 在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy.Aop.Co ...
- Spring Boot 3 新特性及快速使用示例
Spring Boot 3 截止2022年7月28日发版4个里程碑版本 v3.0.0-M4 v3.0.0-M3 v3.0.0-M2 v3.0.0-M1 新特性 1.最低要求 要求 说明 JDK JDK ...
- tail将输出的日志放到文件中_如何将Spring Boot应用中日志输出格式改为JSON?
作者:DEV 出自:解道JDON 原文:jdon.com/55006 今天,我们有了一类称为日志聚合系统的应用程序.当我们拥有大量微服务并且我们希望跨微服务跟踪日志时,日志聚合很有用. 传统的Java ...
- Spring Boot框架中使用Jackson的处理总结
1.前言 通常我们在使用Spring Boot框架时,如果没有特别指定接口的序列化类型,则会使用Spring Boot框架默认集成的Jackson框架进行处理,通过Jackson框架将服务端响应的数据 ...
- Spring Boot特性
2019独角兽企业重金招聘Python工程师标准>>> SpringApplication SpringApplication类提供了一种从main()方法启动Spring应用的便捷 ...
- [转] Spring Boot特性
[From] http://blog.javachen.com/2015/03/13/some-spring-boot-features.html 1. SpringApplication Sprin ...
- Spring Boot简介,四大核心,特性
版权声明:本文为博主原创文章,未经博主允许不得转载 一.Spring Boot简介 1.Spring boot是Spring家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程,也可 ...
- Spring boot的特性与四大核心
特性: 1.能够快速创建基于Spring的应用程序: 2.能够直接使用java main方法启动内嵌的Tomcat,Jetty服务器运行Spring boot程序,不需要部署war包文件: 3.提供约 ...
- Spring Boot并不重复“造轮子”
2.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的基于Spring的全新框架,其设计目的是简化Spring应用的搭建和开发过程.该框架遵循"约定大于配置& ...
最新文章
- 两个列向量相乘怎么计算_矩阵:行主序、列主序、行向量、列向量
- 3D相机D2C对齐的方法
- 如何对比_潭酒红潭酱酒对比红花郎怎么样口感如何
- excel运行最多行数
- 【Android】自定义环形菜单View
- 荷兰人发明的新客机是劈叉的!乘客坐在机翼上
- JavaScript总结(3)
- BootStrap笔记-文本颜色链接颜色背景颜色
- 汇编语言实现简单的计算器
- 对佛教大小无别的弦论解释
- 避重就轻:Intel的垄断抗辩
- 3D 数学(三角函数、坐标系、向量、摄像机跟随、点乘)
- android autolayout教程,Android中AutoLayout的使用
- linux 图片批量裁处理,linux下使用Image Magick批量处理图片
- 教育大数据可视化研究综述笔记
- 正则表达式网站在线测试
- PG系列6-PostgreSQL的体系架构
- 蓝牙技术|蓝牙助力智能手表的未来发展
- 零一背包问题(一维列表逆序的解释)
- Controller层使用@value注解获取不到 yml文件中的properties属性值
热门文章
- idea、webstorm使用过程出现问题
- 前端工程师面试题汇总(我的解析,可能不一定对)(HTML部分)
- python实现排序算法lowb三人组之冒泡排序
- 云和恩墨 | 安全稳健 - 全面保障某城商行核心系统大版本顺利升级
- Unity的WebGL发布在IIS上并加载资源的若干问题
- SLT2021: LIGHTSPEECH: LIGHTWEIGHT NON-AUTOREGRESSIVE MULTI-SPEAKER TEXT-TO-SPEECH
- 集线器、交换机、路由器功能原理入门总结
- 使用屏幕录制专家--录制视频技巧
- linux常用软件收集
- WebAI.js:一个简单的网页前端 AI 模型部署工具