SpringBoot使用Jackson序列化反序列化配置

几种常见方式

1. 全局application配置

常用配置:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    serialization: true
    deserialization: true
    default-property-inclusion: non_empty
    parser: true

具体配置详见org.springframework.boot.autoconfigure.jackson.JacksonProperties

2. 重新注入ObjectMapper

Jackson配置:
@ConditionalOnClass(ObjectMapper.class)
public class JacksonAutoConfiguration {…}

例:

    @Bean
    @Primary
	@ConditionalOnMissingBean(ObjectMapper.class)
	public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
		ObjectMapper objectMapper = builder.createXmlMapper(false).build();
		// 属性为”“或null时不序列化。
		objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
		// 允许未知属性
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
		// 字段保留, 讲null转为”“
		objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
			@Override
			public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
				gen.writeString("");
			}
		});
		return objectMapper;
	}

3. 自定义MappingJackson2HttpMessageConverter

    @Bean
	public MappingJackson2HttpMessageConverter converter() {
		MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
		ObjectMapper objectMapper = new ObjectMapper();
		JavaTimeModule timeModule = new JavaTimeModule();
		timeModule.addSerializer(Date.class, new DateSerializer(false, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")));
		timeModule.addDeserializer(Date.class, new DateDeserializers.DateDeserializer());
		timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		objectMapper.registerModule(timeModule);
		objectMapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
		objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);	// 未知属性
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_VALUES, false);
		messageConverter.setObjectMapper(objectMapper);
		return messageConverter;
	}

 

附: 使用RestTemplate调用外部接口序列化配置

注入上面配置好的MappingJackson2HttpMessageConverter再构造template即可。

    @Resource
	private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;    

    @Bean
	public RestTemplate restTemplate() {
		// 使用restTemplate调用外部接口使用自定义配置的jackson序列化和反序列化。 (忽略不存在的字段,忽略属性大小写)
		return new RestTemplate(Collections.singletonList(mappingJackson2HttpMessageConverter));
	}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值