Springboot使用jackson或fastjson时不过滤null值

FastJson不过滤null值

1.局部

在属性上加上注解

    @JSONField(serialzeFeatures= {SerializerFeature.WriteMapNullValue})

2.全局

实现WebMvcConfigurer

@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

@Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建fastJson消息转换器
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();

        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        MediaType mediaTypeJson = MediaType.valueOf(MediaType.APPLICATION_JSON_UTF8_VALUE);
        supportedMediaTypes.add(mediaTypeJson);
        converter.setSupportedMediaTypes(supportedMediaTypes);
      //创建配置类
        FastJsonConfig config = new FastJsonConfig();
        config.getSerializeConfig().put(Json.class, new SwaggerJsonSerializer());

        //修改配置返回内容的过滤
        //WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
        //WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
        //DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
        //WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
        //WriteMapNullValue:是否输出值为null的字段,默认为false
        config.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect
        /*,SerializerFeature.WriteMapNullValue*/);
        converter.setFastJsonConfig(config);
        //将fastjson添加到视图消息转换器列表内
        converters.add(converter);
    }

}

 

SerializerFeature属性

名称含义备注
QuoteFieldNames输出key时是否使用双引号,默认为true 
UseSingleQuotes使用单引号而不是双引号,默认为false 
WriteMapNullValue是否输出值为null的字段,默认为false 
WriteEnumUsingToStringEnum输出name()或者original,默认为false 
UseISO8601DateFormatDate使用ISO8601格式输出,默认为false 
WriteNullListAsEmptyList字段如果为null,输出为[],而非null 
WriteNullStringAsEmpty字符类型字段如果为null,输出为”“,而非null 
WriteNullNumberAsZero数值字段如果为null,输出为0,而非null 
WriteNullBooleanAsFalseBoolean字段如果为null,输出为false,而非null 
SkipTransientField如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true 
SortField按字段名称排序后输出。默认为false 
WriteTabAsSpecial把\t做转义输出,默认为false不推荐
PrettyFormat结果是否格式化,默认为false 
WriteClassName序列化时写入类型信息,默认为false。反序列化是需用到 
DisableCircularReferenceDetect消除对同一对象循环引用的问题,默认为false 
WriteSlashAsSpecial对斜杠’/’进行转义 
BrowserCompatible将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false 
WriteDateUseDateFormat全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat); 
DisableCheckSpecialChar一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false 
NotWriteRootClassName含义 
BeanToArray将对象转为array输出 
WriteNonStringKeyAsString含义 
NotWriteDefaultValue含义 
BrowserSecure含义 
IgnoreNonFieldGetter含义 
WriteEnumUsingName含义

 

jackson可参考:https://blog.csdn.net/weixin_41753364/article/details/106590126

 

使用Spring Boot和Fastjson,如果有属性为null不返回的需求,可以通过以下几种方式来实现: 1. 使用JsonSerialize注解:在需要处理的属性上添加@JsonSerialize注解,并设置属性的nulls属性为Nulls.SKIP。例如: ```java import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.Nulls; public class MyObject { @JSONField(nulls = Nulls.SKIP) private String property; // 其他属性和方法... } ``` 这样当属性nullFastjson将会忽略该属性,不会返回给前端。 2. 使用JsonInclude注解:在类上添加@JsonInclude注解,并设置属性的为JsonInclude.Include.NON_NULL。例如: ```java import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) public class MyObject { private String property; // 其他属性和方法... } ``` 这样当属性nullFastjson将会忽略该属性,不会返回给前端。 3. 自定义返回结果:可以在返回结果的候手动去除属性为null的字段。例如: ```java import com.alibaba.fastjson.JSONObject; public JSONObject customizeResult(MyObject myObject) { JSONObject jsonObject = (JSONObject) JSONObject.toJSON(myObject); jsonObject.remove("property"); // 去除属性null的字段 return jsonObject; } ``` 在返回结果之前,通过JSONObject的remove方法将属性null的字段移除,然后返回给前端。 以上是三种常见的在使用Spring Boot和Fastjson处理属性为null不返回的方式,可以根据具体需求选择其中一种来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值