0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# SpringBoot 当 JSON 返回值格式化为 null 或空值时处理为 ““ 返回

{
    "code": 200,
    "message": "查询成功",
    "data": [
        {
            "id": 1485178867378401281,
            "nickname": "测试",
            "city": null,
            "gender": null,
            "phone": null,
        }
    ]
}

当我们返回一个JSON格式的数据时,经常会出现 null 值的这种情况,在实际项目中,我们有可能希望当字段为 null 值时返回 ""。例如:

{
    "code": 200,
    "data": [
        {
            "city": "",
            "gender": "",
            "id": "1485178867378401281",
            "nickname": "测试",
            "phone": "",
        }
    ],
    "message": "查询成功"
}

解决方法:

使用 fastjson 处理 JSON 数据,我们需要自定义实现 WebMvcConfigurationSupport 类,重写其中的 configureMessageConverters 方法

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    @Bean
    public HttpMessageConverter fastJsonMessageConverters() {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();

        /*
            SerializerFeature.PrettyFormat 格式化输出
            WriteMapNullValue  输出 map 中值为 null 的字段
            WriteNullStringAsEmpty  字符类型字段如果为 null,输出为 ”“
            WriteNullNumberAsZero   数值字段如果为 null,输出为 0
            WriteNullListAsEmpty    List字段如果为 null,输出为[]
            WriteNullBooleanAsFalse Boolean字段如果为 null,输出为 false
            DisableCircularReferenceDetect  消除对同一对象循环引用的问题
         */
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullBooleanAsFalse,
                SerializerFeature.DisableCircularReferenceDetect);

        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");

        //将long型转换成字符串输出,防止过长丢失精度
        SerializeConfig.getGlobalInstance().put(Long.class, ToStringSerializer.instance);
        fastJsonConfig.setSerializeConfig(SerializeConfig.globalInstance);

        fastConverter.setFastJsonConfig(fastJsonConfig);
        fastConverter.setDefaultCharset(StandardCharsets.UTF_8);

        List<MediaType> mediaTypeList = new ArrayList<>();
        // 解决中文乱码问题,相当于在 Controller上的 @RequestMapping 中加了个属性produces = "application/json"
        mediaTypeList.add(MediaType.APPLICATION_JSON);
        fastConverter.setSupportedMediaTypes(mediaTypeList);

        return fastConverter;

    }

    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(fastJsonMessageConverters());
    }
}
举报

相关推荐

0 条评论