前言:

在设计接口返回的时候,有些字段因为没有用到所以会是 null,这些字段直接返回会给前端会造成不必要的麻烦,而且有违程序猿审美,必须隐藏掉;同时还有另一种场景,某些字段在逻辑处理的时候是有用的,但是不能展示给前端,同样也需要隐藏掉。

一、 隐藏指定属性

Spring 注解 @JsonIgnore,只要加在指定属性上即可完成 json 序列化时自动忽略。

public class Data {

    private Integer id;
    private String info;

    @JsonIgnore
    private LocalDateTime localDateTime;
}

二、隐藏为 null 的字段

1. 方式一

bean 类上加注解 @JsonInclude(JsonInclude.Include.NON_NULL)

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Data {

    private Integer id;
    private String info;
    private LocalDateTime localDateTime;
}

缺陷:所有涉及的 bean 都需要手动添加。

2. 方式二

在配置文件加入全局配置,如下

spring:
  jackson:
    # json 序列化排除值为 null 的属性
    default-property-inclusion: non_null 
    # 配置 Date 类的时间格式,如果不涉及可以不加
    date-format: yyyy-MM-dd HH:mm:ss
    # 配置 Date 类的时区,如果不涉及可以不加
    time-zone: GMT+8  

三、配置失效问题

很大可能出现的问题是上述方式二失效,或者换句话说是配置文件失效,目前这个情况在 springboot2.x 版本中出现的很频繁,这个主要涉及到的是 @EnableWebMvc 注解和 WebMvcConfigurationSupport (拦截器经常使用)类,追根究底是 WebMvcConfigurationSupport 导致自动配置不生效(@EnableWebMvc  注解引入的类继承了WebMvcConfigurationSupport),这块问题可以在网上查看一下解决方案,不想去查的可以参考以下解决方案:

1. 工程里面不要有 @EnableWebMvc 注解

2. 拦截器不要继承 WebMvcConfigurationSupport ,推荐实现 WebMvcConfigurer 接口

WebMvcConfigurationSupport 导致配置不生效可参考一下博客:

1.继承WebMvcConfigurationSupport后自动配置不生效的问题及如何配置拦截器_霓虹深处-CSDN博客

2. SpringBoot2继承了WebMvcConfigurationSupport后,WebMvcAutoConfiguration自动配置失效 - 菜鸟_L - 博客园 (cnblogs.com)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐