美文网首页@IT·互联网技术研发汇集
SpringBoot集成Jackson实现JSON序列化

SpringBoot集成Jackson实现JSON序列化

作者: 知信学源 | 来源:发表于2024-01-31 07:32 被阅读0次

一、前言

Jackson是一个在Java中常用的JSON序列化和反序列化库,它具有操作简单、性能优秀、支持多种数据格式等特点,被广泛应用于各种服务端开发中。SpringMVC框架的默认json解析器也是Jackson。当前常见的json解析器还有Gson、fastjson等,jackson的优势是解析大的json文件处理速度快,运行时占用内存低,性能好。SpringBoot可以很方便的集成Jackson实现对JSON数据的读写。

二、SpringBoot集成

如果我们的SpringBoot项目有引入spring-boot-starter-web这个依赖,那么我们就不用手动引入jackson的依赖了,它会默认带有jackson依赖包。

Jackson核心模块介绍:

jackson-core:核心包,它提供基于流模式解析的相关API。

jackson-annotations:提供标准注解功能。

jackson-dababind:数据绑定包,提供基于对象绑定解析相关API。

如果我们没有引入spring-boot-starter-web这个依赖,要想使用jackson的话需要引入下面的依赖。

com.fasterxml.jackson.core

jackson-databind

2.9.1

三、Jackson相关注解

@JsonProperty:这个注解用于属性上,作用是把该属性名称序列化成另外一个名称。例如我们把name属性序列化成userName。

@JsonProperty("userName")

private String name;

@JsonFormat:这个注解用于属性或方法上,作用是把属性的格式序列化成指定的格式。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

private Date birthday;

@JsonPropertyOrder:这个注解用于类上,作用是指定属性在序列化后json中的顺序。

package com.example.nettydemo.entity;

import com.fasterxml.jackson.annotation.JsonFormat;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.Data;

import javax.persistence.*;

import java.io.Serializable;

import java.util.Date;

/**

* @author wangjw

* @date 2023/12/20

* @des 测试实体

*/

@Entity

@Table(name = "t_user")

@Data

@JsonPropertyOrder({"id", "userName", "birthday", "age"})

public class User implements Serializable {

    private static final long serialVersionUID = -5834774138265230945L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@JsonProperty("userName")

private String name;

@JsonIgnore

private Integer age;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

private Date birthday;

}

@JsonIgnore:这个注解用于属性上,作用是进行JSON操作时忽略这个属性。

@JsonIgnore

private Integer age;

四、测试

1.Json数据转Java对象

Java实体类如下所示:

package com.example.nettydemo.entity;

import com.fasterxml.jackson.annotation.JsonFormat;

import com.fasterxml.jackson.annotation.JsonIgnore;

import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import lombok.Data;

import javax.persistence.*;

import java.io.Serializable;

import java.util.Date;

/**

* @author wangjw

* @date 2023/12/20

* @des 测试实体

*/

@Entity

@Table(name = "t_user")

@Data

@JsonPropertyOrder({"id", "userName", "birthday", "age"})

public class User implements Serializable {

    private static final long serialVersionUID = -5834774138265230945L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@JsonProperty("userName")

private String name;

@JsonIgnore

private Integer age;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

private Date birthday;

}

测试:

package com.example.nettydemo;

import com.example.nettydemo.entity.User;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

/**

* @author Wangjw

* @date 2023/12/27

* @des 测试

*/

@SpringBootTest

public class JacksonTest {

@Test

void testRead() throws JsonProcessingException {

//1.定义一个json串

String json = "{\"id\":1,\"userName\":\"qq\",\"age\":18,\"birthday\":\"2023-12-27 14:37:18\"}";

//2.创建ObjectMapper类

ObjectMapper mapper = new ObjectMapper();

User user = mapper.readValue(json, User.class);

//3.打印

System.out.println(user);

}

}

结果:

User(id=1, name=qq, age=null, birthday=Wed Dec 27 14:37:18 CST 2023)

2.Java对象转Json数据

package com.example.nettydemo;

import com.example.nettydemo.entity.User;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;

/**

* @author Wangjw

* @date 2023/12/27

* @des 测试

*/

@SpringBootTest

public class JacksonTest {

@Test

void testWrite() throws JsonProcessingException {

//1.创建对象

User user = new User();

user.setId(2L);

user.setName("hello");

user.setAge(20);

user.setBirthday(new Date());

//2.创建ObjectMapper类

ObjectMapper mapper = new ObjectMapper();

// 转json数据

String json = mapper.writeValueAsString(user);

//3.打印

System.out.println(json);

}

}

结果:

{"id":2,"userName":"hello","birthday":"2023-12-27 15:03:08"}

相关文章

网友评论

    本文标题:SpringBoot集成Jackson实现JSON序列化

    本文链接:https://www.haomeiwen.com/subject/mzwnodtx.html