一些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(如果不配置有可能会进入死循环)
WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
WriteMapNullValue:是否输出值为null的字段,默认为false