經常要為接口響應對象設置屬性,序列化的時候是不是包含空值,反序列化的時候是否忽略不認識的字段。所以,必須要手動制定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注解修改特殊的序列化
