首页 > 其他分享 >SpringBoot集成Jackson实现JSON序列化

SpringBoot集成Jackson实现JSON序列化

时间:2024-01-13 21:00:57浏览次数:21  
标签:Jackson jackson SpringBoot private json import 序列化 com fasterxml

一、前言

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

二、SpringBoot集成

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

SpringBoot集成Jackson实现JSON序列化_json

Jackson核心模块介绍:

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

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

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

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

<!--jackson依赖-->
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency>


三、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 qx
 * @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 qx
 * @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 qx
 * @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 qx
 * @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"}


标签:Jackson,jackson,SpringBoot,private,json,import,序列化,com,fasterxml
From: https://blog.51cto.com/u_13312531/9233385

相关文章

  • springboot mybatis postgres 对于json类型的字段转换
    在SpringBoot与MyBatis结合使用时,处理PostgreSQL中的JSON类型字段的转换可以分为以下步骤:自定义TypeHandler:为了在Java实体类与数据库的JSON类型字段之间进行转换,需要创建一个自定义的 TypeHandler。例如,针对JSONObject类型的转换器可以这样实现:importorg.apache.ibatis.type.B......
  • 手拉手Springboot获取yml配置文件信息
    环境介绍技术栈springboot3软件版本mysql8IDEAIntelliJIDEA2022.2.1JDK17SpringBoot3.1.7配置文件说明:启动配置文件优先级:properties高于yml配置文件application.ymlyml是JSON的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代application.properties。在创建一个S......
  • 基于SpringBoot+Vue的居家养老系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • 蚂蚁爱购--靠谱的SpringBoot项目
    ​简介这是一个靠谱的SpringBoot项目实战,名字叫蚂蚁爱购。从零开发项目,视频加文档,十天就能学会开发JavaWeb项目。教程路线是:搭建环境=>安装软件=>创建项目=>添加依赖和配置=>通过表生成代码=>编写Java代码=>代码自测=>前后端联调=>准备找工作。学完即可成为合格的Java......
  • 不雅文字过滤?springboot可以这样做!实战!
    这里主要讲敏感词过滤与替换两个功能,引入相关maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boo......
  • springboot医院信息化云HIS运维平台源码 SaaS模式
    一、HIS系统HIS系统是医院最主要的系统,它主要涵盖基本流程功能,是医院系统的核心业务系统。这里的HIS指的是狭义的HIS系统,仅仅包括门诊、住院的医嘱结算相关功能的系统。一般门诊和住院是同一个系统,包括以下一些工作站:1、门诊部分挂号及预约、划价及收费、门诊处方及病历、医生排......
  • SpringBoot项目启动时间从8分钟降到了40秒?神操作!
    publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}publicstaticConfigurableApplicationContextrun(Class<?>[]primarySources,String[]args){returnnewSpri......
  • Springboot 全局日期时间格式处理
    GET请求及POST表单请求(RequestParam和PathVariable参数):--配置Converter<String,T>转换器实现参数转换,该转换器bean会注入到springmvc的参数解析器中(ParameterConversionService)POST-application/json请求(RequestBody参数)--配置ObjectMapper(这个玩意儿会注......
  • SpringBoot中使用SpringEvent业务解耦神器实现监听发布事件同步异步执行任务
    场景SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135504554设计模式-观察者模式在Java中的使用示例-环境监测系统:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det......
  • springBoot自定义拦截器
    编写FuelH5InterceptorConfig配置类packagecom.fuel.framework.config;importcom.fuel.framework.interceptor.FuelH5Interceptor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Configuration;importorg......