JsonProperty注解的access属性

1. 实体类

java 复制代码
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
@TableName("test_user")
public class TestUser implements Serializable {
    private String id;
    private String name;
    private String age;
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
}

2. 示例

java 复制代码
import cn.cjc.enity.TestUser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Date;

public class Demo {
    public static void main(String[] args) throws JsonProcessingException {
        TestUser testUser = new TestUser();
        testUser.setId("55");
        testUser.setName("55");
        testUser.setAge("55");
        testUser.setCreateDate(new Date());
        // 使用 Jackson ObjectMapper 序列化
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonStr = objectMapper.writeValueAsString(testUser);
        System.out.println(jsonStr);

        // 使用 Jackson ObjectMapper 反序列化
        TestUser obj = objectMapper.readValue(jsonStr, TestUser.class);
        System.out.println(obj);

    }
}
  • @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    • 序列化(对象转 JSON)时,createDate会被包括在JSO 中。
    • 反序列化(JSON 转对象)时,createDate将会被忽略,不能通过 JSON 中的值来设置该字段的值。
shell 复制代码
{"id":"55","name":"55","age":"55","createDate":"2025-09-25 01:08:07"}
TestUser(id=55, name=55, age=55, createDate=null)
  • @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    • 序列化时,会导致 createDate不被序列化到 JSON 输出。
    • 反序列化时,JSON中没有 createDate 字段,它将保持 null。
shell 复制代码
{"id":"55","name":"55","age":"55"}
TestUser(id=55, name=55, age=55, createDate=null)
  • @JsonProperty(access = JsonProperty.Access.AUTO)
    • 序列化、反序列化随机
  • @JsonProperty(access = JsonProperty.Access.READ_WRITE)
    • Jackson 会根据字段的getter和setter方法自动决定是否允许序列化和反序列化。
相关推荐
灵犀学长22 分钟前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
好家伙VCC2 小时前
【无标题】
java
小碗羊肉2 小时前
【JavaWeb | 第十一篇】文件上传(本地&阿里云OSS)
java·阿里云·servlet
吾疾唯君医3 小时前
Java SpringBoot集成积木报表实操记录
java·spring boot·spring·导出excel·积木报表·数据文件下载
Byron Loong3 小时前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++
hexu_blog4 小时前
vue+java实现图片批量压缩
java·前端·vue.js
头歌实践平台4 小时前
Hadoop开发环境搭建
java·大数据·hadoop
Seven974 小时前
一致性Hash算法:如何实现分布式系统中的高效数据分片?
java
摇滚侠4 小时前
IDEA 生成 try catch 快捷键
java·ide·intellij-idea
阿旭超级学得完5 小时前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表