@JsonProperty注解使用详解

作者: adm 分类: java 发布时间: 2023-07-30

一、@JsonProperty的access属性的序列化和反序列化
实体类

@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "自增id")
private Long id;

@ApiModelProperty(value = "工号")
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String jobNumber;

@ApiModelProperty(value = "用户姓名")
private String username;

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ApiModelProperty(value = "密码")
private String pwd;

1.java存读redis测试
保存读取操作

LoginUser loginUser = new LoginUser();
loginUser.setId(1L);
loginUser.setUserName("test");
loginUser.setJobNumber("10000000");
loginUser.setPwd("123456");

# redis保存的(带有JsonProperty.Access.WRITE_ONLY,直接将属性忽略)
  [
    "com.iof.upms.modules.system.vo.LoginUser"
    {
      id:-1
      userName:"test"
      jobNumber:"10000000"
    }
]
# redis读取的(带有JsonProperty.Access.READ_ONLY,直接将属性忽略)
LoginUser(id=1, jobNumber=null, username=test, pwd=null)

在redis中存取时结论

带有JsonProperty.Access.WRITE_ONLY的属性,存入redis时该属性不保存-忽略,也就是序列化时忽略属性

带有JsonProperty.Access.READ_ONLY的属性,从redis读取时该属性不读取-忽略,也就是反序列化时忽略属性

2.postman调用接口时
接口调用测试

LoginUser loginUser = new LoginUser();
loginUser.setId(1L);
loginUser.setUserName("test");
loginUser.setJobNumber("10000000");
loginUser.setPwd("123456");

# 接口调用
{"id":1,"jobNumber":"10000000","userName": "test"}

接口调用时结论

带有JsonProperty.Access.WRITE_ONLY的属性,接口请求时该属性忽略,也就是序列化时忽略属性
带有JsonProperty.Access.READ_ONLY的属性,不受影响,接口接收不存在反序列化操作

二、@JsonProperty的value属性序列化和反序列化
实体类

@TableId(type = IdType.AUTO)
@ApiModelProperty(value = "自增id")
private Long id;

@ApiModelProperty(value = "用户姓名")
@JsonProperty(value = "name")
private String username;

1.java存读redis测试
保存读取操作

LoginUser loginUser = new LoginUser();
loginUser.setId(1L);
loginUser.setUserName("test");

# redis保存的(带有JsonProperty.Access.WRITE_ONLY,直接将属性忽略)
  [
    "com.iof.upms.modules.system.vo.LoginUser"
    {
      id:-1
      name:"test"
    }
]
# redis读取的(带有JsonProperty.Access.READ_ONLY,直接将属性忽略)
LoginUser(id=-1, userName=test)

在redis中存取时结论
带有value属性,存入redis(序列化)时存入的key替换为value的值

带有value属性,从redis读取(反序列化)时自动赋值到对应的属性中

2.postman调用接口时
接口调用测试

LoginUser loginUser = new LoginUser();
loginUser.setId(1L);
loginUser.setUserName("test");


# 接口调用
{"id":1, "name": "test"}

接口调用时结论
带有@JsonProperty(value = “*”)的属性,接口请求时,key替换为value的值

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!