SpringBoot响应实体类中响应值为null时字段被过滤

一、问题

在SpringBoot中使用了FastJson之后,响应结果的实体类如果字段为null,则会过滤字段显示。

二、解决方式

可以为FastJson配置一个HttpMessageConverter(消息转换对象),代码如下

@Configuration
public class FastJsonConverterConfig {

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        //1.定义一个convert消息转换对象
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的序列化配置信息
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
                SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullListAsEmpty);
        //3.处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        //4.在convert中添加配置信息
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        return new HttpMessageConverters(fastJsonHttpMessageConverter);

    }
}

关键点在于fastJsonConfig.setSerializerFeatures方法接收SerializerFeature对象

三、SerializerFeature说明

名称 含义 备注
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteEnumUsingToString 用枚举toString()值输出,默认为false
WriteEnumUsingName 用枚举name()输出,默认为false
UseISO8601DateFormat 数据用ISO8061的编码格式输出,默认为false
WriteNullListAsEmpty List类型字段如果为null,则转换成[ ]空数组
WriteNullStringAsEmpty String类型字段如果为null,则转换成""空字符串
WriteNullNumberAsZero 数值类型字段如果为null,则转换成0
WriteNullBooleanAsFalse boolean类型字段如果为null,则转换成false
SkipTransientField 序列化时忽略transient标记的字段,默认为true
SortField 按字段名称排序后输出,默认false
WriteTabAsSpecial 把"\t"作为转义输出,默认为flase 已弃用
PrettyFormat 格式化JSON格式,默认为false
WriteClassName 序列化时写入类信息,默认为false。序列化时需要用到
DisableCircularReferenceDetect 消除对同一对象的循环引用,默认为false
WriteSlashAsSpecial 对斜杠"/"进行转义
BrowserCompatible 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE6,默认为false
WriteDateUseDateFormat 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
NotWriteRootClassName 序列化时不写入类信息
DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
BeanToArray 将对象转为array输出
WriteNonStringKeyAsString 将属性key写为String
NotWriteDefaultValue 不设默认值
BrowserSecure 防御xss安全攻击
IgnoreNonFieldGetter 忽略没有get方法的字段
WriteNonStringValueAsString 将不是string的key转换成string
IgnoreErrorGetter 当获取值出错是忽略该值
WriteBigDecimalAsPlain 将BigDecimal类型转换成普通类型
MapSortField 对map字段进行排序
posted @   爱笑的皮蛋  阅读(724)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示
主题色彩