java spring boot jackson 配置 null字符串为"" null数组为[]

如果后端字段为null 前端经常判断null也是挺麻烦的
配置jackso可以达到
把字符串null转为""
null数组转为[]

添加两种处理null的方法 。你也可以添加更多比如int为null的处理、布尔为null的处理等

public class CustomJsonSerializer {
  public static class CollectionSerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
      if (value == null) {
        value = new ArrayList();
      }
      gen.writeObject(value);
    }
  }

  public static class StringSerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
      if (value == null) {
        value = "";
      }
      gen.writeObject(value);
    }
  }
}

配置jackson

@Configuration
public class JacksonConfig {

  @Bean
  @Primary
  @ConditionalOnMissingBean(ObjectMapper.class)
  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();
    objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new BeanSerializerModifier() {
      @Override
      public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
        for (BeanPropertyWriter beanProperty : beanProperties) {
          Class clazz = beanProperty.getType().getRawClass();
          //判断类型
          if (clazz.isArray()) {
            beanProperty.assignNullSerializer(new CustomJsonSerializer.CollectionSerializer());
          } else if (clazz == String.class) {
            beanProperty.assignNullSerializer(new CustomJsonSerializer.StringSerializer());
          }
        }
        return beanProperties;
      }
    }));
    return objectMapper;
  }
}

配置结束 这样前端对于这两种就不用再判断null了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值