SpringBoot json空值处理,将null值转为空字符串,空集合转为空数组等


import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * @author firefly_
 * @since 2020/12/2
 */
@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 MyBeanSerializerModifier()));
    return objectMapper;
  }

  private static class MyBeanSerializerModifier extends BeanSerializerModifier {

    @Override
    public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
        BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
      for (BeanPropertyWriter writer : beanProperties) {
        // 判断字段的类型,如果是array,list,set则注册nullSerializer
        if (isArrayType(writer)) {
          writer.assignNullSerializer(new MyNullArrayJsonSerializer());
        } else {
          writer.assignNullSerializer(new MyNullJsonSerializer());
        }
      }
      return beanProperties;
    }

    static boolean isArrayType(BeanPropertyWriter writer) {
      Class<?> clazz = writer.getType().getRawClass();
      return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
    }
  }

  private static class MyNullArrayJsonSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider)
        throws IOException {
      if (value == null) {
        jsonGenerator.writeStartArray();
        jsonGenerator.writeEndArray();
      }
    }
  }

  private static class MyNullJsonSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider)
        throws IOException {
      jsonGenerator.writeString("");
    }
  }

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容