@Configuration
public class JacksonConfiguration {
@Bean
public ObjectMapper jacksonObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object value, JsonGenerator jg, SerializerProvider sp)
throws IOException {
jg.writeString("");
sp.getDefaultNullKeySerializer();
}
});
SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
objectMapper.setDateFormat(smt);
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);
return objectMapper;
}
}
原因是最近在kotlin和Java之间的调用出现非空字段不能忽略,并且空串被转null,时间格式无法正确反序列化。
其他kotlin服务字段需要使用无法进行忽略出现的反序列化异常。
在网上找了很多解决办法,多数是解决feign之外的调用配置可以生效。并且是伪全局配置。
上面代码可以解决空串转null,前提kotlin字段可以为null的情况。