Springboot統一配置Jackson


經常要為接口響應對象設置屬性,序列化的時候是不是包含空值,反序列化的時候是否忽略不認識的字段。所以,必須要手動制定ObjectMapper或者在類上聲明

@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)

雖然不算復雜,但既然統一了規則,那就來個統一設定吧。

在springboo1.5+以上的版本可以這么設置Jackson的一些屬性配置

spring:
  jackson:
    serialization:
      WRITE_DATES_AS_TIMESTAMPS: false
    default-property-inclusion: non_null

更多配置參見 org.springframework.boot.autoconfigure.jackson.JacksonProperties


@ConfigurationProperties(
    prefix = "spring.jackson"
)
public class JacksonProperties {
    private String dateFormat;
    private String jodaDateTimeFormat;
    private String propertyNamingStrategy;
    private Map<SerializationFeature, Boolean> serialization = new HashMap();
    private Map<DeserializationFeature, Boolean> deserialization = new HashMap();
    private Map<MapperFeature, Boolean> mapper = new HashMap();
    private Map<Feature, Boolean> parser = new HashMap();
    private Map<com.fasterxml.jackson.core.JsonGenerator.Feature, Boolean> generator = new HashMap();
    private Include defaultPropertyInclusion;
    private TimeZone timeZone = null;
    private Locale locale;
    
    //省略
}

LocalDateTime統一序列化

配置類

@Configuration
public class LocalDateTimeSerializerConfig {
    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;

    @Bean
    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }

}

配置文件

spring:
  profiles:
    active: dev
  jackson:
    default-property-inclusion: non_null
    date-format: "yyyy-MM-dd HH:mm:ss"
    joda-date-time-format: "yyyy-MM-dd HH:mm:ss"
    time-zone: "Asia/Shanghai"
    serialization:
      WRITE_DATES_AS_TIMESTAMPS: false

單獨jackson注解修改特殊的序列化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM