SpringBoot jackson 提供了 default-property-inclusion
为空时不序列化等功能,但是没有提供如果属性值为null时,修改为空串的功能,公司项目开发业务正好需要这个功能,琢磨了一下找到了修改 MappingJackson2HttpMessageConverter
改变序列化规则的方法。
相应的代码如下:
/**
* @author imyzt
* @date 2019/07/19
* @description 自定义ObjectMapper, 修改序列化规则, 将String null 修改为 String ''
*/
@Configuration
public class JsonObjectMapper extends ObjectMapper {
public JsonObjectMapper() {
super();
this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(StringUtils.EMPTY);
}
});
}
@Bean
public MappingJackson2HttpMessageConverter objectMapper(){
MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new JsonObjectMapper());
return converter;
}
}
主要逻辑就是继承ObjectMapper,构造器重写父类序列化规则,setNullValueSerializer
方法设置为null的值的序列化规则。jsonGenerator.writeString(StringUtils.EMPTY);
然后重新创建一个 MappingJackson2HttpMessageConverter ,Jackson序列化时则会按照相关规则序列化。