ToolConvoyToolConvoyv2.6
DEV

JSON 转 Java POJO — 从 JSON 生成 Java POJO 类

从 JSON 生成带 Jackson 注解的 Java POJO 类。不可变 record、可空字段、Lombok 支持 —— 在浏览器中完成,无需上传。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

JSON to Java POJO

Convert JSON to Java POJO class with Jackson annotations. Works entirely in your browser.

Java 几十年来一直是企业应用开发的中流砥柱,它在 JSON 序列化上的处理方式也是所有语言里最成熟的生态。Jackson 作为事实标准,只要类结构与 JSON 形状一致,就能零配置把 JSON 反序列化成普通 Java 对象(POJO)—— 但类结构本身还得先存在。为每一个 API 响应手写一个 Java 类,是一项随端点数量线性增长的体力活,而生成的类又是下游每一层的输入:把它以 JSON 返回的 controller,对它做转换的 service,把它持久化的 repository。生成器遍历一份 JSON 响应,推断 Java 类型,输出一个可以直接编译进项目的类。

Java 特有的、不那么显然的考量,是 record 和 POJO 之间的取舍。Java record 在 Java 16 中引入,是不可变数据载体的紧凑语法:一行 record User(String name, int age) 就等同于一个完整的 POJO,自带构造器、equalshashCodetoString。Jackson 通过 canonical constructor 上的 @JsonCreator 注解原生支持 record。对 Java 16+ 的新项目,record 是合适的默认选择 —— 它更短、更安全,并且相比带 setter 的可变 POJO,更清楚地表达了「这是一个数据对象」的意图。需要可变状态、需要生成代理的框架(JPA、Spring AOP),或运行在 Java 16 之前的运行时上的项目,POJO 仍然是合适的选择。

生成 POJO 之后最常见的下一步,是把它接入一个 Spring Boot controller:在类上加 @RestController,加一个返回该 POJO 的 @GetMapping 方法,Jackson 自动处理序列化。如果目的地是一个 Kafka topic,可以加 @Serde 注解,或直接用 Jackson 的 ObjectMapper。生成的类是数据契约 —— 负责校验、转换、持久化的业务逻辑,是属于开发者的部分。

广告

使用方法

  1. 粘贴你的 JSON

    拖入一个 JSON 对象或一个对象数组。生成器遍历结构,为根节点输出一个 Java 类,并为每个对象形状生成嵌套的 static 内部类。

  2. 选择 record 或 POJO 风格

    在 Java 16+ record(不可变、紧凑构造器语法)和传统 POJO(private 字段、getter 与 setter)之间切换。开启 Jackson 注解开关后,输出会带上 `@JsonProperty`、`@JsonIgnoreProperties` 和 `@JsonCreator`。

  3. 复制或下载 .java 文件

    把生成的 Java 复制到剪贴板,或下载为 .java 文件。输出可直接用 `javac` 编译,与 Jackson `ObjectMapper` 配合工作 —— 无需额外的 import 文件。

常见问题

应该选 record 还是 POJO?

Java record(Java 16+)天生不可变,与 Jackson 的 `@JsonCreator` 配合做反序列化很顺。如果不可变性对你很重要、项目又跑在 Java 16 及以上,就选 record。需要可变字段、setter,或要兼容老版本运行时,就选 POJO。

JSON 键是怎么映射到 Java 字段名的?

默认情况下,snake_case 的 JSON 键(`user_id`)会变成 camelCase 的 Java 字段(`userId`),同时挂一个 `@JsonProperty("user_id")` 注解,让 Jackson 的 `ObjectMapper` 保留原始键名。关闭注解开关则走 Jackson 默认的 property-naming-strategy。

可空字段是怎么处理的?

样本里为 null 的字段会被标成 `@Nullable` 引用类型。基本类型(`int`、`boolean`)会自动装箱成 `Integer`、`Boolean`,以便容纳 null。如果 API 保证字段一定存在,可以手动加 `@NotNull` 或 `@NonNull` 注解。

会生成 Lombok 注解吗?

会 —— 开启「Lombok」开关后,输出会用 `@Data`、`@NoArgsConstructor`、`@AllArgsConstructor` 注解代替手写的 getter 和 setter。两种方式生成的代码都是纯净的 Java;Lombok 只是给已经在用它的项目走个捷径。

数组和集合怎么处理?

JSON 数组会变成 `List<T>` 字段。生成器会输出 `import java.util.List;`,并用泛型类型作为列表元素类型。Jackson 在反序列化时能自动处理这些类型化集合,只要元素类型是一个具体类就行。

限制说明

  • 不带 JPA 实体注解输出是用于 JSON 反序列化的 POJO,不是给 Hibernate 用的 JPA 实体。如果这个类同时映射到数据库表,需要手动补上 `@Entity`、`@Id`、`@Column` 注解。
  • 不识别 enum在几个固定值之间切换的字符串字段会被输出成 String,而不是 Java enum。检查输出,手动补上 `public enum Status { ACTIVE, PENDING, CLOSED }`。
  • 类型从单一样本推断样本里是整数、其他响应里可能是小数的字段会被类型化成 `int`。如果你的 API 不稳定,检查输出,必要时改成 `double` 或 `BigDecimal`。

平台说明

macOS
IntelliJ IDEA、Eclipse、装了 Java 扩展包的 VS Code 都接受生成的类。在原型阶段、或从 API 文档页粘贴内容时,用本浏览器工具做一次性生成很合适。
Windows
Windows 上的 IntelliJ 处理生成类的方式完全相同。不想打开完整 IDE 又想快速生成一个类时,本浏览器工具是合适的选择。
Linux
命令行场景下,标准的等价工具是 `jsonschema2pojo`。一次性生成、不值得为它装 Maven 或 Gradle 时,本浏览器工具是合适的选择。
Web
完全在客户端运行。页面加载后即可离线使用。
广告
广告