Nemo

Nemo 关注TA

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

Nemo

Nemo

关注TA

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

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,493,291字

该文章投稿至Nemo社区   Java  板块 复制链接


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

发布于 2018/06/14 19:13 3,968浏览 0回复 2,264

一些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
点赞(0)
点了个评