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 类型(
String、int、double、boolean)
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) {}