ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-05-26 19:32:26  阅读:247  来源: 互联网

标签:输出 实体类 false SpringBoot 响应值 序列化 默认 SerializerFeature 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字段进行排序

标签:输出,实体类,false,SpringBoot,响应值,序列化,默认,SerializerFeature,null
来源: https://www.cnblogs.com/cw999/p/16314635.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有