SpringBoot NULL转“”(空字符串)

#SpringBoot NULL转“”(空字符串)
有时候前端的同学要求把String类型为NULL变成空字符串“”返回给他们,然而我们又不能简单的把全局的所有的类型为NULL的对象都这么去处理,而且也不能在非Http请求中这么返回,因为严格来说NULL并不等于“”,可能会引发意想不到的错误,所以我们只需要在Http访问的时候把JSON的String返回去。所以参考下面一篇文章,但是引用的文章中会导致其它的注解失效,而且影响了其它代码。所以这里我重新写了一份
本文部分引用自:jackson自定义序列化中null值的处理

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.IOException;
import java.util.Date;
import java.util.List;

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {

    /**
     * 专门处理http json null 转 "" 字符串的问题
     * @param converters
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        initGlobalJackson2ObjectMapperBuilder(builder);
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new MyNullBeanSerializerModifier()));
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(jackson2HttpMessageConverter);
    }

    static public void initGlobalJackson2ObjectMapperBuilder(Jackson2ObjectMapperBuilder builder) {
       //全局共有的序列化反序列化用builder参数设置即可
    }


    @Bean("jackson2ObjectMapperBuilderCustomizer")
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        Jackson2ObjectMapperBuilderCustomizer customizer = new Jackson2ObjectMapperBuilderCustomizer() {
            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
              initGlobalJackson2ObjectMapperBuilder(jacksonObjectMapperBuilder);
            }
        };
        return customizer;
    }



    static public class MyNullStringJsonSerializer extends JsonSerializer {

        @Override
        public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                throws IOException, JsonProcessingException {
            if(o == null) {
                jsonGenerator.writeString("");
            }
        }
    }


    static public class MyNullBeanSerializerModifier extends BeanSerializerModifier {
        // 字符串等类型
        private JsonSerializer _nullJsonSerializer = new MyNullStringJsonSerializer();

        @Override
        public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List beanProperties) {
            //循环所有的beanPropertyWriter
            for (int i = 0; i < beanProperties.size(); i++) {
                BeanPropertyWriter writer = (BeanPropertyWriter) beanProperties.get(i);
                //判断字段的类型,如果是array,list,set则注册nullSerializer
                if (writer.getPropertyType().equals(String.class)) {
                    writer.assignNullSerializer(this._nullJsonSerializer);
                }
            }
            return beanProperties;
        }

    }


}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将null换成字符串,可以使用以下方法: 引用\[1\]中的代码是一个将单个对象中的String类型的null字段换为字符串的方法。该方法接受一个待化对象作为参数,并遍历对象的所有字段。如果字段的类型是String并且值为null,就将其设置为字符串。 引用\[2\]中的代码是一个将集合中的所有对象中的String类型的null字段换为字符串的方法。该方法接受一个待化的集合作为参数,并遍历集合中的每个对象。对于每个对象,它会遍历对象的所有字段,如果字段的类型是String并且值为null,就将其设置为字符串。 引用\[3\]中提到了在控制层将对象序列化返回给前端时,有些字段为null,可以对jackson稍加修改,将值为null换成字符串""。具体的实现方法可以参考引用\[3\]中的代码。 所以,根据以上方法,你可以将null换成字符串。 #### 引用[.reference_title] - *1* *2* [使用工具类把对象中的null换为字符串(集合也可以使用)](https://blog.csdn.net/qq_44580165/article/details/126140038)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot使用Jackson序列化时将null字符串](https://blog.csdn.net/backbug/article/details/105316517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值