SpringBoot 序列化 Json 响应时根据字段名排序

为使前后端的处理逻辑一致,在返回值序列化时,统一根据字段名的循序排序。

示例代码

同时过滤了值为 null 的字段。

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.boot.autoconfigure.jackson.JacksonProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {

    @Bean
    JacksonProperties jacksonProperties() {
        JacksonProperties properties = new JacksonProperties();
        properties.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
        properties.getMapper().put(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
        properties.getSerialization().put(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
        return properties;
    }

}
Jackson 自定义序列化、反序列化方法

下面的示例代码是序列化日期类型为.net 日期类型默认反序列化支持的格式。

DotNetDateSerializer 反序列化类

自定义一个帮助函数,指定所有日期类型统一使用该序列化方法。

package com.octopus.soa.common.helper;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;

import java.io.IOException;
import java.util.Date;

/**
* Created by liujiajia on 2017/12/15.
*/
public class DotNetDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("/Date(" + String.valueOf(date.getTime()) + "-0000)/");
}
}
Spring Boot 中统一配置日期型字段的序列化(格式 + 默认时区)

application.properties 文件按照如下方式配置即可:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8