关于@JsonProperty注解的使用

@JsonProperty(access = JsonProperty.Access.READ_ONLY) 是一个用于定义 JSON 属性访问权限的注解,在 Java 开发中常用于定义实体类的属性。该注解用于指定属性在序列化和反序列化过程中的访问权限。

@JsonProperty(access = JsonProperty.Access.READ_ONLY) 用于标记一个属性为只读,意味着在序列化过程中可以将该属性的值包含在生成的 JSON 中,但在反序列化过程中,该属性的值将被忽略。

这个注解可以用于控制 JSON 序列化和反序列化操作中的字段访问权限,例如,某些字段可能希望只在序列化时出现在 JSON 中,而不希望在反序列化时被赋值,这时可以使用 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 注解。

举个eg:
假设前端传递的数据为

{
    "id":"d27adff74ee511ee8e5f005056be6831",
    "sprint":"",
    "demandType":"2",
    "planType":"N",
    "attachment":",896879aa4f78f5531235e474c0ea1ad1",
    "sysUploadFilesList":[
        {
            "id":"896879aa4f78f5531235e474c0ea1ad1",
            "createBy":"421",
            "createTime":"2023-09-09T08:05:52.925+00:00",
            "delFlag":"N",
            "sourceFileName":"Snipaste_2023-09-09_14-17-17.png",
            "targetFileName":"matter/Snipaste_2023-09-09_14-17-17_1694246752723.png",
            "previewUrl":"http://192.168.6.248:9000/eis/matter/Snipaste_2023-09-09_14-17-17_1694246752723.png"
        }
    ]
}

假设我想对这个虚拟的sysUploadFilesList上传的路径,不进行序列化,我们改怎么办?

直接在对应的entity 属性上加上@JsonProperty的注解

比如:

    //附件的列表
    @TableField(exist = false)
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private List<SysUploadFilesRecords> sysUploadFilesList;

这里的JsonProperty.Access有4个参数:

JsonProperty.Access.AUTO(默认):自动确定此属性的读取和/或写入访问权限。
JsonProperty.Access.READ_ONLY:只读取此属性的值,不会写入。
JsonProperty.Access.WRITE_ONLY:只写入此属性的值,不会读取。
JsonProperty.Access.READ_WRITE:既读取也写入此属性的值。
大家看着取值即可
请添加图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
@JsonProperty注解是Jackson库中的一个注解,用于将Java对象的属性序列化为JSON格式时指定属性名。具体使用方法如下: 1. 导入Jackson库的依赖,例如在Maven项目中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> ``` 2. 在Java对象的属性上添加@JsonProperty注解,并指定属性名,例如: ```java public class User { @JsonProperty("id") private int userId; @JsonProperty("name") private String userName; // getter和setter方法省略 } ``` 上述代码中,@JsonProperty("id")表示将userId属性序列化为JSON格式时,使用"id"作为属性名;@JsonProperty("name")表示将userName属性序列化为JSON格式时,使用"name"作为属性名。 3. 将Java对象序列化为JSON格式时,使用ObjectMapper类的writeValueAsString()方法,例如: ```java ObjectWriter objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter(); User user = new User(); user.setUserId(1); user.setUserName("张三"); String json = objectWriter.writeValueAsString(user); System.out.println(json); ``` 输出结果为: ```json { "id" : 1, "name" : "张三" } ``` 上述代码中,ObjectMapper类用于将Java对象序列化为JSON格式,ObjectWriter类用于指定输出格式,withDefaultPrettyPrinter()方法表示输出的JSON格式可读性更高。 需要注意的是,如果Java对象的属性名和JSON格式中的属性名一致,可以省略@JsonProperty注解,Jackson库会自动将属性名转换为小写字母开头的字符串。例如: ```java public class User { private int id; private String name; // getter和setter方法省略 } ``` 将上述代码序列化为JSON格式时,输出结果为: ```json { "id" : 0, "name" : null } ``` 可以看到,Jackson库自动将Java对象的属性名转换为小写字母开头的字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值