java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot ObjectMapper配置json序列化

Springboot通过ObjectMapper配置json序列化详解

作者:你住过的屋檐

SpringBoot默认集成Jackson库,其中ObjectMapper类是核心,用于Java对象与JSON字符串的互转,提供配置序列化特性、注册模块等方法,在SpringBoot中可以全局配置JSON格式,如日期格式化、将Long转为字符串,还可以配置序列化时的各种规则,感兴趣的可以了解一下

前言

Spring Boot 默认集成了 Jackson,ObjectMapper 是 Jackson 库中的一个核心类,它是用于将 Java 对象转换为 JSON 字符串,以及将 JSON 字符串转换回 Java 对象的主要工具。主要用于将数据格式化为指定格式,方便显示。

一、ObjectMapper主要提供了以下方法

1、configure(SerializationFeature f, boolean state);//用于配置序列化、反序列化、JsonParser特性、JsonGenerator 特性,
2、enable(T f,T…)//启用功能
3、disable(T f,T…)//禁用功能
4、 registerModule(Module module)//注册序列化器
5、readValue(String content, Class valueType) //将 JSON 字符串反序列化为指定类型的 Java 对象。
6、writeValueAsString(Object value) //将 Java 对象序列化为 JSON 字符串。
//以上的T可以是SerializationFeature 、DeserializationFeature 、JsonParser.Feature、JsonGenerator.Feature

二、在springboot中全局配置json格式化

通过创建配置类,注册一个ObjectMapper并且通过序列化器将日期转换为指定格式,将Long类型转换为字符串类型,同时以下配置也解决了接口接收未知数参数不抛出异常的问题,实际中大家可以复制下面代码并且增加增加自己所需要的配置,其实相关json格式化的配置相当多,大家有需要可以查询源码中的配置参数

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * json处理
 * @aphorism You are lucky to have someone to help you.No one to help you, is just fate.No one should do anything for you, because life is your own, you are responsible for yourself
 */
@Configuration
public class JacksonHandle {
    private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
    private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
    @Bean
    @Primary
    public ObjectMapper objectMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        //日期序列化器
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        //日期序列化
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
        //日期反序列化
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN)));
        javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN)));
        javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN)));
        //反序列化-禁用在遇到未知属性的时候抛出异常
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        //注册序列化器
        objectMapper.registerModule(javaTimeModule);
        //自定义序列化器
        SimpleModule module = new SimpleModule();
        //添加将long序列化为string
        module.addSerializer(Long.class, new ToStringSerializer());
        //注册序列化器
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

三、以下是我找到的一些具体配置的释义,大家有需要可以参考

SerializationFeature配置参数

以下是序列化配置类SerializationFeature中的配置项的具体含义:
1. WRAP_ROOT_VALUE(false)
含义:如果序列化的Java对象是一个单一值(例如一个基本类型或字符串),则将其包装在一个数组中。
默认值:false
示例:如果序列化一个字符串 “hello”,默认情况下输出 “hello”;如果设置为 true,则输出 [ “hello” ]。
2. INDENT_OUTPUT(false)
含义:是否对输出的JSON进行缩进格式化,以提高可读性。
默认值:false
示例:如果设置为 true,输出的JSON将会被格式化,例如 { “name”: “John” } 变为:

  {
    "name": "John"
  }

DeserializationFeature配置参数

到此这篇关于Springboot通过ObjectMapper配置json序列化详解的文章就介绍到这了,更多相关Springboot ObjectMapper配置json序列化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文