LinkNemo





Nemo博客

路漫漫其修远兮,吾将上下而求索。

  1. 博客主页
  2. 最新文章
  3. Springboot 返回json,对空字段格式化

Springboot 返回json,对空字段格式化

一些json数据返回,例如list,map,字符串等,在为空的情况下,会直接给客户端返回为null,这时候客户端解析可能会出现处理,需要做一些处理

列举一个Bean:

@Data
@ToString
public class Student {

    private String name;

    private List<String> tags;
    
}

这时候,比如name和tags都为空,这时候序列化为json的结果:

{
"name":null,
"tags":null
}

前端对于null的解析可能会出现问题。

在标准的json格式中,空字符串应该是:“”,空列表应该是:[],空map应该是:{}

所以上述我们返回的数据应该是:

{
“name”:"",
"tags": []
}


在springboot中,可以添加如下配置,来格式化返回数据:

@Configuration
@EnableWebMvc
@ComponentScan
public class WebMvcConfig extends WebMvcConfigurerAdapter {

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

    private HttpMessageConverter<?> fastJsonConverter() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
             SerializerFeature.PrettyFormat,
             SerializerFeature.WriteMapNullValue,
            // 避免循环引用
            SerializerFeature.DisableCircularReferenceDetect,
            //数值字段如果为null,输出为0,而非null 
            SerializerFeature.WriteNullNumberAsZero,
            // List字段如果为null,输出为[],而非null 
            SerializerFeature.WriteNullListAsEmpty);

        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);

        converter.setFastJsonConfig(fastJsonConfig);
        converter.setSupportedMediaTypes(supportedMediaTypes);
        return converter;
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    }

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {}


}


一些常用处理说明:

WriteNullListAsEmpty  List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非null
WriteMapNullValue:是否输出值为null的字段,默认为false

评论

About ME

Nemo

Nemo

欢迎使用这个博客!如果您在使用的过程中有好的建议或者遇到问题,欢迎给我留言~

Other ME

性别:男

生日:1993-01-01

所在城市:深圳市

工作职务:菜鸟工程师

创建时间:2015/12/31 02:13:14

My SUMMARY

我的文章:373

我的留言:44

我的粉丝:45

我的关注:125

我的点击:365489

么么哒