返回给前端的Json对象中有很多字段没有值,就会有很多的null值(如下图)
![前后端交互时将返回值中的null置为空字符串的8种方式_第1张图片](http://img.e-com-net.com/image/info8/a62fc5375fd5427892dcfaec967dc737.jpg)
前端判断处理会比较麻烦,所以打算在后端回传数据时做一下处理:
1、字符串null值置为空字符串
2、空List转为[]
3、封装数字类型null转为0
4、Boolean类型null转为false
先看想要达到的效果:
![前后端交互时将返回值中的null置为空字符串的8种方式_第2张图片](http://img.e-com-net.com/image/info8/9bd7a3d09e614ed9a552bb88f32e9690.jpg)
一、通过继承WebMvcConfigurationSupport,重写configureMessageConverters方法实现
@Configuration
public class MyJsonConfig extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
//json格式输出
SerializerFeature.PrettyFormat,
// 保留map为空的字段
SerializerFeature.WriteMapNullValue,
// 将String类型的null转成""形式
SerializerFeature.WriteNullStringAsEmpty,
// 将Number类型的null转成0
SerializerFeature.WriteNullNumberAsZero,
// 将List类型的null转成[],而不是""
SerializerFeature.WriteNullListAsEmpty,
// Boolean类型的null转成false
SerializerFeature.WriteNullBooleanAsFalse,
// 处理可能循环引用的问题
SerializerFeature.DisableCircularReferenceDetect);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(StandardCharsets.UTF_8);
List mediaTypeList = new ArrayList<>();
mediaTypeList.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypeList);
converters.add(converter);
}
}
二、通过实现WebMvcConfigurer,重写configureMessageConverters方法实现
@Configuration
public class BaseMvcConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
/**
* 序列换成Json时,将所有的Long变成String
* 因为js中得数字类型不能包括所有的java Long值
*/
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
// 所有的double类型返回保留三位小数
simpleModule.addSerializer(Double.class, CustomerDoubleSerialize.instance);
simpleModule.addSerializer(Double.TYPE, CustomerDoubleSerialize.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
}
三、在Springboot启动类中注入Bean---FastJson
@Bean
public HttpMessageConverters fastJsonConverters() {
FastJsonHttpMessageConverter4 fastConverter = new FastJsonHttpMessageConverter4();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.IgnoreNonFieldGetter,
SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
fastConverter.setFastJsonConfig(fastJsonConfig);
List supportedMediaTypes = new ArrayList();
supportedMediaTypes.add(new MediaType("text", "json", Charset.forName("utf8")));
supportedMediaTypes.add(new MediaType("application", "json", Charset.forName("utf8")));
fastConverter.setSupportedMediaTypes(supportedMediaTypes);
HttpMessageConverter converter = fastConverter;
return new HttpMessageConverters(converter);
}
四、在Springboot启动类中注入Bean---Jackson
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
List supported = new ArrayList<>();
supported.add(MediaType.APPLICATION_JSON_UTF8);
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(supported);
// JsonMapper
ObjectMapper objectMapper = new ObjectMapper();
// null值的处理,必须要放在第一步,否则会将下面的日期格式化覆盖掉 null ==> ""
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer