• @JsonProperty注解使用详解


    一、@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的值
  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/eternityz/p/15330096.html
Copyright © 2020-2023  润新知