美文网首页
SpringBoot json空值处理,将null值转为空字符串

SpringBoot json空值处理,将null值转为空字符串

作者: firefly_ | 来源:发表于2019-09-29 15:29 被阅读0次
    
    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("");
        }
      }
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:SpringBoot json空值处理,将null值转为空字符串

          本文链接:https://www.haomeiwen.com/subject/klsqyctx.html