接口返回字段为 `null` ,排除掉的处理方法

在微服务架构中,接口的返回值常常需要传递给前端或其他服务进行处理。如果接口中包含了大量为 null 的字段,这不仅会增加数据传输的带宽,造成不必要的浪费,还会让前端处理变得更加复杂。因此,在设计接口返回时,去除无效的 null 字段是一个很重要的优化步骤。

常见的两种方法来解决这个问题分别是使用 Jackson 提供的注解和在配置文件中设置全局配置。

方法一:使用 @JsonInclude(JsonInclude.Include.NON_NULL) 注解

Jackson 是 Spring Boot 默认的 JSON 处理库。我们可以通过在类上添加 @JsonInclude(JsonInclude.Include.NON_NULL) 注解,来排除所有为 null 的字段。

示例代码:
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)  // 排除 null 字段
public class Data {
    private Integer id;
    private String name;
    private String mail;

    // Getters and Setters
}
解释:
  • @JsonInclude(JsonInclude.Include.NON_NULL):该注解用于告诉 Jackson 在序列化对象时,排除所有为 null 的字段。这样,返回给前端的数据将只包含那些有值的字段,避免了不必要的 null 字段。

这种方式适用于单个对象,方便对每个对象进行细粒度的控制。

方法二:在配置文件中设置全局配置

如果希望全局生效,而不需要在每个类上都加注解,可以通过修改 application.ymlapplication.properties 文件中的配置,来实现全局排除 null 字段。

示例配置:
spring:
  jackson:
    # json 序列化时,排除值为 null 的属性
    default-property-inclusion: non_null
    # 配置 Date 类的时间格式(可选)
    date-format: yyyy-MM-dd HH:mm:ss
    # 配置 Date 类的时区(可选)
    time-zone: GMT+8
解释:
  • spring.jackson.default-property-inclusion: non_null:此配置项告诉 Jackson 在序列化对象时,默认排除所有值为 null 的字段。这会影响整个项目中的 JSON 序列化行为。
  • date-format:配置日期格式,如果项目中涉及到日期字段,可以通过此配置指定日期的格式。
  • time-zone:配置时区,指定日期字段使用的时区。

这种方式适用于项目中的所有类,并且更简洁,不需要在每个类中单独加注解。

总结

去除 null 字段的返回数据不仅能够减少不必要的带宽浪费,还能让前端的处理变得更加清晰和简单。根据实际需求,可以选择两种方式中的任意一种进行处理:

  • 对于单个类,可以使用 @JsonInclude(JsonInclude.Include.NON_NULL) 注解来精确控制。
  • 对于全局设置,可以通过修改 application.ymlapplication.properties 文件来进行统一配置。

通过这种方式,我们可以优化接口返回的数据结构,提升性能,并减少前端的负担。