接口返回值如何去掉空字段?

接口返回值如何去掉空字段?

在开发过程中,对外接口有如下需求:系统提供了一个API接口,对方希望他的接口返回值做一下处理,只返回非空的数据,把空字段过滤一下,我们需要如何做?

今日内容介绍,大约花费9分钟

接口返回值如何去掉空字段?

比如:

{
    "success"true,
    "code"10000,
    "message""操作成功!",
    "data": {
        "id"null,
        "title""springboot葵花宝典",
        "description""微信公众号",
        "published"null
    }
}


上面JSON数据published值为null,那么在返回前端的时候我们需要不返回published字段。 这是一种比较常见的需求,我把我常用的处理办法进行总结,供大家参考。

提供的API接口,在返回json数据给用户之前,需要将实体对象转换成json数据。

这就需要使用json转换工具,在Spring框架中默认的JSON序列化框架是Jackson,这是最常用的Json处理框架,当然除此之外可能小伙伴们也可能会使用fastjson,我们都会进行介绍



1. Jackson去空值

1.1. 局部配置去空值

Jackson 框架中,给我们提供@JsonInclude注解,既可以使用在类上面,也可以使用在字段上面,该注解的value值使用Include.NON_NULL,标记为非空。

  • @JsonInclude注解使用在具体字段
@Data
public class Tutorial implements Serializable {


    private Long id;

    private String title;

    private String description;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private Integer published;

    private static final long serialVersionUID = 1L;
}

Jackson转换成json数据的时候,如果发现published为空值,就会直接过滤

  • @JsonInclude注解使用在具体类
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Tutorial implements Serializable {
  // 省略...
}

Jackson转换成json数据的时候,如果发现Tutorial类中只要有字段存在空值,就会直接过滤字段

思考:可能有很多接口有这样的需求,难道我们需要一个个在类上添加该注解?

肯定不是的,我们可以进行Jackson全局配置,统一过滤空字段

1.2. 全局配置去空值

Jackson在Spring Boot中的配置通常较为简单,因为Spring Boot默认使用MappingJackson2HttpMessageConverter作为JSON消息转换器,而不需要特定的配置类。只需要配置ObjectMapper,可以轻松地实现实现在接口返回值中去掉空字段

/**
 * @Author: springboot葵花宝典
 * @Github: https://github.com/bangbangzhou
 * @description: TODO
 */

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 设置在序列化时不包括值为null的字段
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 其他定制配置,根据需要添加

        return objectMapper;
    }
}

这个配置类使用ObjectMapper来配置Jackson的一些特性,其中setSerializationInclusion(JsonInclude.Include.NON_NULL)将在序列化时排除掉值为null的字段。

注意:SpringBoot使用HttpMessageConverter接口转换HTTP请求和响应。开箱即用中包含明智的默认设置。例如,可以将对象自动转换为JSON(通过使用Jackson库)默认情况下,字符串以UTF-8编码。

2.Fastjson去空值

fastjson是阿里开源的高性能JSON序列化框架,虽然fastjson有一些bug,但有些项目还在大量使用。

如果使用的是Fastjson作为JSON序列化库,需要通过配置FastJsonHttpMessageConverter和FastJsonConfig来实现在接口返回值中去掉空字段


@Configuration
public class MyFastjsonConfig {
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters(){
        //1、先定义一个convert转换消息的对象
        FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
        //2、添加fastjson的配置信息,比如是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig=new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        //3、在convert中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        HttpMessageConverter<?> converter=fastConverter;
        return new HttpMessageConverters(converter);
    }

}




如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!

原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!


原文始发于微信公众号(springboot葵花宝典):接口返回值如何去掉空字段?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/196883.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!