当前位置: 首页 > news >正文

Jackson是什么

一句话版本
Jackson 是目前 Java 世界里 最常用、最老牌、最轻量级JSON 处理库,Spring Boot 默认就把它装进项目,帮你 把 Java 对象 ⇄ JSON 字符串 来回转换,不需要你手写 getJSONObjectput("xxx") 这些繁琐代码。


  1. 它到底能干啥?
  • 序列化:Java Bean → JSON
    User user = new User(1,"Tom");
    String json = objectMapper.writeValueAsString(user);
    得到:{"id":1,"name":"Tom"}

  • 反序列化:JSON → Java Bean
    User u = objectMapper.readValue("{\"id\":1,\"name\":\"Tom\"}", User.class);

  • 树模型:JSON 当 DOM 一样遍历
    JsonNode node = objectMapper.readTree(json);

  • 流式 API:超大 JSON 读写时省内存(类似 XML 的 StAX)

  1. 为什么叫 Jackson?
    纯属作者起名爱好,和 Michael Jackson 没任何关系 😄。

  2. 在 Spring Boot 里的地位
    starter-web 已经自带 spring-boot-starter-json,核心依赖就是 Jackson。
    所以给前端返回对象时,你写的代码只是:

@GetMapping("/user")
public User getUser() {return userService.get(1);   // Spring 自动调用 Jackson 把 User 转成 JSON
}
  1. 三个常用 jar
  • jackson-core:流式解析器,底层 JSON 读写
  • jackson-annotations:提供 @JsonFormat、@JsonIgnore 等注解
  • jackson-databind:高层对象映射,最常用,实际开发基本只感知它
  1. 同类竞品
    Google Gson、阿里巴巴 Fastjson、JSON-B(Java EE 官方标准)。
    它们都能做 JSON 转换,但 Jackson 功能最全、社区最大、Spring 默认,所以市占率最高。

  2. 一句话记住
    Jackson 就是 Java 界的“JSON 翻译官”,你只管写 Java Bean,它负责帮你变成 JSON 发出去,再把收到的 JSON 变回 Java 对象。

Jackson注解

这段注解:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime estimatedDeliveryTime;

Jackson(Spring Boot 默认的 JSON 序列化/反序列化库)提供的,用来告诉它:

“把 estimatedDeliveryTime 这个 LocalDateTime 字段,当成字符串输出/输入,格式必须是 yyyy-MM-dd HH:mm:ss,别给我整成数组或时间戳。”

逐条拆解:

  1. @JsonFormat
    Jackson 的注解,只管 JSON 序列化与反序列化,跟数据库、JPA、MyBatis 无关。

  2. shape = JsonFormat.Shape.STRING
    指定“JSON 中的形态”是字符串。
    如果不写,Jackson 默认会把 LocalDateTime 序列化成 数组 形式:
    [2025,10,15,14,30,45] —— 对人眼极不友好。
    声明为 STRING 后,就会变成:
    "2025-10-15 14:30:45"

  3. pattern = "yyyy-MM-dd HH:mm:ss"
    shape=STRING 时,必须告诉 Jackson 用哪个格式去 解析输出
    这里用的是最常见的“年月日 时分秒”格式。
    注意大小写:

    • yyyy 四位的年
    • MM 两位的月
    • dd 两位的日
    • HH 24 小时制的小时
    • mm 分钟
    • ss
  4. 作用范围

    • 序列化(Java → JSON):服务端返回给前端时,按指定格式转成字符串。
    • 反序列化(JSON → Java):前端把字符串 "2025-10-15 14:30:45" 传过来时,Jackson 能自动解析成 LocalDateTime
  5. @DateTimeFormat 区别

    • @JsonFormatJSON(前后端交互)。
    • @DateTimeFormat表单/URL 参数application/x-www-form-urlencoded),对 JSON 无效。

一句话总结:
@JsonFormat(shape = STRING, pattern = "yyyy-MM-dd HH:mm:ss") 就是 让 Jackson 把 LocalDateTime 当固定格式的字符串来回转换,既好看又不易出错。

http://www.dtcms.com/a/486084.html

相关文章:

  • 代码实例:Python 爬虫抓取与解析 JSON 数据
  • 襄阳建设网站首页百度知识营销
  • 山东住房和城乡建设厅网站电话开发软件都有哪些
  • AbMole| Yoda1( M9372;GlyT2-IN-1; Yoda 1)
  • LLM监督微调SFT实战指南(Qwen3-0.6B-Base)
  • 【基础算法】多源 BFS
  • *@UI 视角下主程序与子程序的菜单页面架构及关联设计
  • Virtio 半虚拟化技术解析
  • 网站设计怎么好看律师做网络推广哪个网站好
  • 用commons vfs 框架 替换具体的sftp 实现
  • 网站模板怎么设计软件wordpress多重筛选页面
  • 通往Docker之路:从单机到容器编排的架构演进全景
  • 分布式链路追踪:微服务可观测性的核心支柱
  • PostgreSQL 函数ARRAY_AGG详解
  • 【OpenHarmony】MSDP设备状态感知模块架构
  • RAG 多模态 API 处理系统设计解析:企业级大模型集成架构实战
  • 通过一个typescript的小游戏,使用单元测试实战(二)
  • 多物理域协同 + 三维 CAD 联动!ADS 2025 解锁射频前端、天线设计新体验
  • 前端微服务架构解析:qiankun 运行原理详解
  • linux ssh config详解
  • 内网攻防实战图谱:从红队视角构建安全对抗体系
  • 鲲鹏ARM服务器配置YUM源
  • 网站分类标准沈阳网站制作招聘网
  • 建设一个网站需要几个角色建筑工程网课心得体会
  • 基于Robosuite和Robomimic采集mujoco平台的机械臂数据微调预训练PI0模型,实现快速训练机械臂任务
  • 深度学习目标检测项目
  • SQL 窗口函数
  • 盟接之桥浅谈目标落地的底层逻辑:实践、分解与认知跃迁
  • 【Qt】4.项目文件解析
  • Redis-布隆过滤器BloomFilter