提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- @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()的查询结果