提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- @JsonInclude注解
- 是jackSon中最常用的注解之一,是为==实体类在接口序列化返回值时增加规则的注解==
- 1.@JsonInclude用法
- 2.@JsonInclude注解中的规则有
- 案例
- 需求:用mybatis-plus查询指定字段,且为null的字段去除
- 1.用户实体类:User
- 2.controller
- 3.前端表现
- 不加注解@JsonInclude
- 加上注解@JsonInclude
@JsonInclude注解
- jackson包提供的json序列化方法,已经集成于Springboot2.0中,此方法的配置意在可以对实体json序列化的时候进行对应的数值处理。
是jackSon中最常用的注解之一,是为实体类在接口序列化返回值时增加规则的注解
1.@JsonInclude用法
例如,一个接口需要过滤掉返回值为null的字段,即值为null的字段不返回,可以在实体类中增加如下注解
// 在类上加入@JsonInclude(value = JsonInclude.Include.NON_NULL),表明该类为NULL的字段不参加序列化!
@JsonInclude(JsonInclude.Include.NON_NULL)
-
将该标记放在属性上,如果该属性为NULL则不参与序列化 !
-
如果放在类上边,那对这个类的全部属性起作用 !
2.@JsonInclude注解中的规则有
- ALWAYS // 默认策略,任何情况都执行序列化, 即默认返回全部字段
- NON_NULL // 非空 属性为NULL 不序列化 ,即值为null的字段不返回
- NON_ABSENT // null的不会序列化,但如果类型是AtomicReference,依然会被序列化
- NON_EMPTY // null、集合数组等没有内容、空字符串等,都不会被序列化
- NON_DEFAULT // 如果字段是默认值,就不会被序列化
- CUSTOM // 此时要指定valueFilter属性,该属性对应一个类,用来自定义判断被JsonInclude修饰的字段是否序列化
- USE_DEFAULTS //当JsonInclude在类和属性上都有时,优先使用属性上的注解,此时如果在序列化的get方法上使用了JsonInclude,并设置为USE_DEFAULTS,就会使用类注解的设置
案例
需求:用mybatis-plus查询指定字段,且为null的字段去除
- 1如下看到非常多的用户信息,比如我们要用mybatis查询指定用户字段怎么查询呢,就得用@JsonInclude()注解了
1.用户实体类:User
/*** 用户表*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "tb_user")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User implements Serializable {/*** 主键*/@TableId(value = "id", type = IdType.INPUT)private Long id;/*** 用户编号*/@TableField(value = "code")private String code;/*** 账号*/@TableField(value = "account")private String account;/*** 密码*/@TableField(value = "password")private String password;/*** 手机*/@TableField(value = "phone")private String phone;/*** 昵称*/@TableField(value = "name")private String name;/*** 真名*/@TableField(value = "real_name")private String realName;/*** 头像*/@TableField(value = "avatar")private String avatar;/*** 邮箱*/@TableField(value = "email")private String email;/*** 生日*/@TableField(value = "birthday")private Date birthday;/*** 性别*/@TableField(value = "sex")private Short sex;/*** 创建时间*/@TableField(value = "create_time")private Date createTime;/*** 修改时间*/@TableField(value = "update_time")private Date updateTime;/*** 状态(0:不可用,1:可用)*/@TableField(value = "status")private Integer status;/*** 是否已删除*/@TableField(value = "is_deleted")private Integer isDeleted;private static final long serialVersionUID = 1L;
}
2.controller
@Slf4j
@RestController
public class AudienceController {/*** 根据id查询用户详情*/@GetMapping("/findUserInfoDetails/{id}")public Result<Object> findUserInfoDetails(@PathVariable("id") Long userId){return Result.ok(userService.findUserInfoDetails(userId));}
}
3.前端表现
不加注解@JsonInclude
在用户实体类上不加注解@JsonInclude()查询出来的数据如下:
- 有看到我们只是查询我们想要的数据,但是那些我们没查询的数据也返回给我们了
加上注解@JsonInclude
- .在用户实体类上加注解@JsonInclude()的查询结果