JSON转Java类转换器:从JSON数据生成POJOs

发布: (2026年2月23日 GMT+8 01:38)
3 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

将 JSON 响应转换为 Java 类是 Java 后端开发中最常见的任务之一。消费 REST API 时,需要与 JSON 响应结构相匹配的 Java 类。手动为嵌套的 JSON 对象编写 POJO 既耗时又容易出错。

示例 JSON

{
  "id": 1,
  "name": "John Doe",
  "email": "john@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Springfield",
    "zipCode": "62701"
  },
  "orders": [
    { "orderId": "A001", "total": 29.99 }
  ]
}

生成的 POJO

与其手动编写类,不如使用 JSON‑to‑Java 转换器即时生成:

  • 带私有字段的 POJO 类
  • 每个字段的 getter 与 setter
  • 构造方法(默认 + 带参)
  • 嵌套类用于嵌套对象
  • List 类型用于数组
  • 正确的 Java 类型(Stringintdoubleboolean
public class User {
    private int id;
    private String name;
    private String email;
    private Address address;
    private List orders;

    // Getters and setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }

    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }

    public List getOrders() { return orders; }
    public void setOrders(List orders) { this.orders = orders; }
}

使用 Jackson 进行序列化

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

// Example POJO with Jackson annotations
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    @JsonProperty("id")
    private int id;

    @JsonProperty("name")
    private String name;

    // other fields, getters, setters...
}

// Serialization / deserialization
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class);
String json = mapper.writeValueAsString(user);

小贴士

  • 为 JSON 名称与 Java 字段名不一致的字段添加 @JsonProperty
  • 使用 @JsonIgnoreProperties(ignoreUnknown = true) 忽略未知的 JSON 属性,以保持向前兼容性。
  • 对于 Java 16+,可以考虑使用 record 来实现不可变的数据载体:
public record User(int id, String name, String email, Address address, List orders) {}
0 浏览
Back to Blog

相关文章

阅读更多 »

商店3

gradle 任务 runQuantumtype: JavaExec { dependsOn prepareLibDir, classes systemProperty 'org.gradle.scan.acceptTerm', 'true' doFirst { setTmpDir buildFileSystem'...