SpringBoot-24-默认Json框架jackson详解

简介: SpringBoot-24-默认Json框架jackson详解

SpringBoot-24-默认Json框架jackson配置详解

SpringBoot返回JSON数据的方式

目前SpringBoot提供的JSon格式有三种:


  • 默认jackson
  • Gson
  • JsonB
  • fastjson(这是阿里提供的,现在国内也较多使用)

这些我们都可以在springboot自动配置模块spring-boot-autoconfigure中查看到




3f81d39b9cb5e438edee66a450d7d8fd.png


为什么springboot默认使用Jackson呢?

这是因为在spring-boot-starter-web依赖包中已经依赖了Jaskson的依赖包jackson-databind,是的Jackson变成了Springboot的默认Json处理器。



a875e5cc5fe63e59caab83a5bff4d723.png


下面我们就开始讲解一下SpringBoot默认Json框架Jackson的详细配置。

Jackson详解

Jackson默认实现


当我们创建springboot项目引入spring-boot-starter-web依赖以后,Springboot就开始帮助我们对实体进行Json处理了。

例如我们创建Student实体类:

@Data
public class Student implements Serializable{
    private Long id;
    private String name;
    private String sex;
    private int age;
    private String email;
    private String mobile;
    private int isEnabled;
    private Date createDate;
    private Date updateDate;
}


然后创建对应控制层处理类:

@Slf4j
@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService studentService;
    @GetMapping("/selectall")
    public List<Student> getAll() {
        return studentService.getAll();
    }
}



  • @RestController注解,会采用HttpMessageConverter将数据进行转换后写入Response的body数据区。

测试结果为:


939dc3003da47a48cddfea0678a251b1.png


Jackson配置

在上面图中我们发现日期格式不是我们想要的yyyy-MM-dd HH:mm:ss格式,那么我们需要通过Jackson怎么将默认时间格式,转换为我们想要的时间格式呢?

通过在application.yml中进行jackson的对应配置去实现

  jackson:
    #日期类型格式化
    date-format: yyyy-MM-dd HH:mm:ss


配置结束以后,我们再次测试http://localhost:8899/student/selectall接口结果如下:

通过ObjectMapper 进行代码配置实现

我们首先将在application.yml中配置的时间格式的配置注释,然后在代码中使用ObjectMapper进行实现

@Configuration
public class MyJacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder){
        ObjectMapper mapper = builder.createXmlMapper(false).build();
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        return  mapper;
    }
}

结果和在配置中的实现是一致的。

在实体类中使用注解

在想要变换格式的字段上添加注解,进行变换格式,实现如下

@Data
@JsonPropertyOrder(value={"name","mobile","sex"})
public class Student implements Serializable{
    @JsonIgnore
    private Long id;
    private String mobile;
    @JsonProperty("性别")
    private String sex;
    private String name;
    private int age;
    @JsonProperty("邮箱")
    private String email;
    private int isEnabled;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createDate;
    private Date updateDate;
}


添加注解结束以后,我们再次测试http://localhost:8899/student/selectall接口结果如下:



fec124c47be98cc0324178667b6bde72.png


在图中我们发现name、mobile字段顺序变换了,sex不仅顺序变换了而且使用了别名,id字段消失了,这都是jackson注解发挥的作用。


常用的Jackson注解


**@JsonPropertyOrder(value={“value1”,“value2”,“value3”})**:将实体对应转换后默认json顺序,根据注解要求进行变换


@JsonIgnore:将某字段排除在序列化和反序列化之外


**@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)**:按照指定日期格式进行转换


**@JsonProperty(“邮箱”)**:给对应字段起别名


**@JsonInclude(JsonInclude.Include.NON_NULL)**:如果字段为空则不做序列化和反序列化


Jackson常用配置

# 日期格式字符串或标准日期格式类全限定名,只控制java.util.Date的序列化format
spring.jackson.date-format= yyyy-MM-dd HH:mm:ss
# 指定Joda date/time的格式,比如yyyy-MM-ddHH:mm:ss. 如果没有配置的话,dateformat会作为backup。
spring.jackson.joda-date-time-format= yyyy-MM-dd HH:mm:ss
# 全局设置pojo或被@JsonInclude注解的属性的序列化方式
spring.jackson.default-property-inclusion= NON_NULL
# 不为空的属性才会序列化,具体属性可看JsonInclude.Include
# 是否开启Jackson的序列化
# 示例:spring.jackson.serialization.indent-output= true
spring.jackson.serialization.*=
# 是否开启Jackson的反序列化
spring.jackson.deserialization.*= 
# 是否开启json的generators
# 示例:spring.jackson.generator.auto-close-json-content=true
spring.jackson.generator.*= 
# 指定json使用的Locale
spring.jackson.locale= zh
# 是否开启Jackson通用的特性
spring.jackson.mapper.*= 
# 是否开启jackson的parser特性
spring.jackson.parser.*= 
# 指定Json策略模式
spring.jackson.property-naming-strategy=com.fasterxml.jackson.databind.PropertyNamingStrategy.UpperCamelCaseStrategy
# 或
spring.jackson.property-naming-strategy=UPPER_CAMEL_CASE
# 是否开启Jackson的反序列化
spring.jackson.serialization.*= 
# 指定日期格式化时区,比如America/Los_Angeles或者GMT+10
spring.jackson.time-zone= GMT+8


  • 这些配置也可以通过ObjectMapper进行实现

如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!

公众号 springboot葵花宝典 主要分享JAVA技术,回复: springboot 获取springboot相关代码视频资料


目录
相关文章
|
30天前
|
XML 安全 Java
|
2月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
51 0
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
8天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
3天前
|
Java 开发者 Spring
理解和解决Spring框架中的事务自调用问题
事务自调用问题是由于 Spring AOP 代理机制引起的,当方法在同一个类内部自调用时,事务注解将失效。通过使用代理对象调用、将事务逻辑分离到不同类中或使用 AspectJ 模式,可以有效解决这一问题。理解和解决这一问题,对于保证 Spring 应用中的事务管理正确性至关重要。掌握这些技巧,可以提高开发效率和代码的健壮性。
24 13
|
15天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
31 5
|
26天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
56 8
|
2月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
73 6
|
2月前
|
Java 数据库连接 数据库
不可不知道的Spring 框架七大模块
Spring框架是一个全面的Java企业级应用开发框架,其核心容器模块为其他模块提供基础支持,包括Beans、Core、Context和SpEL四大子模块;数据访问及集成模块支持数据库操作,涵盖JDBC、ORM、OXM、JMS和Transactions;Web模块则专注于Web应用,提供Servlet、WebSocket等功能;此外,还包括AOP、Aspects、Instrumentation、Messaging和Test等辅助模块,共同构建强大的企业级应用解决方案。
92 2
|
2月前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
161 1