SpringBoot - Jackson详解

写在前面

JSON 是目前主流的前后端数据传输方式。在 Spring Boot 项目中,只要添加了 WEB依赖(spring-boot-starter-web),就可以很方便地实现 JSON 转换。WEB 依赖默认加入了 jackson-databind 作为 JSON 处理器,我们不需要要添加额外的 JSON 处理器就可以返回一段 JSON。
在这里插入图片描述
先看看下面两篇博文:
SpringBoot - @JsonFormat注解详解:https://blog.csdn.net/goodjava2007/article/details/126028371

SpringBoot - @JsonIgnore和@JsonIgnoreProperties注解详解以及区别:https://blog.csdn.net/goodjava2007/article/details/126655804

官方文档

JSON中文官网:http://www.json.org/json-zh.html
JSON官网:http://www.json.org
JACKSON-GITHUB官网地址:https://github.com/FasterXML/jackson
JACKSON-GITHUB文档地址:https://github.com/FasterXML/jackson-docs

版本说明

Jackson 的 1.x 版本的包名是 org.codehaus.jackson ,当升级到 2.x 版本时,包名变为 com.fasterxml.jackson,本文讨论的内容是基于最新的 Jackson 的 2.9.1 版本。

核心模块

Jackson 的核心模块由三部分组成:

  1. jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
  2. jackson-annotations,注解包,提供标准注解功能;
  3. jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。
  4. jackson-databind 依赖 jackson-core 和 jackson-annotations,当添加 jackson-databind 之后, jackson-core 和 jackson-annotations 也随之添加到 Java 项目工程中。

如何在SPRINGBOOT中使用?

第一步:创建实体对象
第二步:针对实体对象的属性添加注解
@JsonIgnore: 序列化时将JAVA BEAN中的一些属性忽略掉,即生成JOSN时不生成其标注过的属性;
@JsonFormat:将日期类型的数据格式化成指定格式的字符串。

public class User {
    private String userName;
    @JsonIgnore
    private String password;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date created;
}

第三步:控制层直接返回该实体对象
另:
我们经常使用的@RequestBody和@ResponseBody注解,他们的作用就是将报文反序列化/序列化POJO对象,SPRING默认使用Jackson来进行序列化和反序列化。(序列化,将JAVA对象转换成字节流的过程;反序列化,将字节流转换成JAVA对象的过程)
在这里插入图片描述

如何在非SPRINGBOOT框架的JAVA项目中使用?

依赖引入
<dependency> 
<groupId>com.fasterxml.jackson.core</groupId> 
<artifactId>jackson-databind</artifactId> 
<version>2.13.4</version> 
</dependency>
常用注解

JACKSON的常用注解:https://www.baeldung.com/jackson-annotations

注解用法
@JsonProperty属性注解,把属性的名称序列化时转换为另外一个名称,可以在序列化和反序列化中使用。
@JsonAlias属性注解,用于指定JAVA属性可以接受的更多名称,只在反序列化中使用。
@JsonIgnore属性注解,用于在序列化时忽略该属性。
@JsonIgnoreProperties类注解,用于在序列化时忽略一个或多个字段。@JsonIgnoreProperties({ “id”,“password” })
@JsonFormat属性注解,针对日期属性使用该注解进行格式化输出。
@JsonPropertyOrder类注解, 用于指定序列化后属性在JSON中的顺序。@JsonPropertyOrder({ “name”, “id” })
@JsonCreator在构造函数中添加@JsonCreator注解,配合@JsonProperty注解进行属性指向。
@JsonRootName类注解,需要先开启:objectMapper.enable(SerializationFeature.WRAP_ROOT_VALUE); 用于给当前序列化的实体对象加一层包裹对象,但不支持该 JSON 串反序列化。
时间格式化的三种方案,当然也可以进行其他的统一设置

A. 使用注解:

public class User {
    private String userName;
    @JsonIgnore
    private String password;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date created;
}

B. 全局配置(application.yml):

spring:
  jackson:
  	# 主要是针对日期字段的格式化
    date-format: yyyy-MM-dd HH:mm:ss
    # 也是针对日期字段的设置, 使用不同的时区, 最终日期类型字段响应的结果不一样
    time-zone: Asia/Shanghai

C. 代码全局配置:

public class ApplicationConfig {

    /**
     * 时区配置
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
        return jacksonObjectMapperBuilder ->
                jacksonObjectMapperBuilder
                        // 设置日期的显示格式
                        .dateFormat(new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"))
                        // 设置时区
                        .timeZone(TimeZone.getDefault());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值