美文网首页@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