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序列化时则会按照相关规则序列化。