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方法自动决定是否允许序列化和反序列化。
相关推荐
AI你一生一世2 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯3 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
AI开源软件5 小时前
SpringBoot3+Vue3 财务管理系统如何设计:从业务单据到总账的模块划分
spring boot·vue3·领域建模·会计凭证·ruoyi office·业财协同·财务系统设计
海的透彻7 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat8 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习8 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one8 小时前
算法--构造
java·数据结构·算法
SL_staff9 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff9 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈