Spring boot 中 使用 Jackson 将null 字段转换为空字符串写法

因为项目中需要将null 转换为空字符串传递给前段,所以研究了一下Spring boot 中如何使用 jackson 将null 转为空字符串的方法

1、重写  Jackson2ObjectMapperBuilder 类的  build 方法
2、重写  ObjectMapper 中的  getSerializerProvider() 中的  setNullValueSerializer() 方法
3、重写  WebMvcConfigurerAdapter 中的  configureMessageConverters() 方法
4、在启动类里增加  public ObjectMapper objectMapper() 初始化bean,并声明 @Primary
5、在 configureMessageConverters 中增加  converters.add(new MappingJackson2HttpMessageConverter(objectMapper()));


完整代码:
1、自定义的 Jackson2ObjectMapperBuilder   类

public class MyJackson2Object extends Jackson2ObjectMapperBuilder{

    @SuppressWarnings("unchecked")
    @Override
    public <T extends ObjectMapper> T build() {
        ObjectMapper om=new ObjectMapper();
        // 重写 ObjectMapper  中的一个方法
        om.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
                jgen.writeObject("");// 输出孔字符串
            }
        });
        configure(om);
        return (T) om;
    }

}

2、在启动类里的用法

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new MappingJackson2HttpMessageConverter(objectMapper()));
        super.configureMessageConverters(converters);
    }

    @Bean
    @Primary
    public ObjectMapper objectMapper(){
        MyJackson2Object builder = new MyJackson2Object();
        builder.propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
        builder.indentOutput(true).dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));// 设置时间格式化
        // converters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build()));
        return builder.build();
    }

本人测试结果如下:

{
  "code": 0,
  "msg": "",
  "data": [
    {
      "id": 1,
      "page": 1,
      "rows": 10,
      "remark": "",
      "name": "A",
      "create_date": "2016-05-16 16:47:59",
      "update_date": ""
    },
    {
      "id": 2,
      "page": 1,
      "rows": 10,
      "remark": "",
      "name": "B",
      "create_date": "2016-05-16 16:48:04",
      "update_date": ""
    }
  ]
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值