对接接口返回一段 JSON,要生成对应的 Java 实体类(POJO)。手写几十个字段 + getter/setter + 注解,既枯燥又易错。能不能自动转?
能。下面讲清楚 JSON → Java 类的类型映射与注解选择,并一步步用本地工具生成。
JSON 类型到 Java 类型的映射
| JSON 类型 | Java 类型 | 备注 |
|---|---|---|
| 对象 {} | 嵌套 class / Map<String,Object> | |
| 数组 [] | List<T> | 推荐用 List 而非数组 |
| 字符串 "a" | String | |
| 整数 | Long / Integer | 大数用 Long,避免溢出 |
| 小数 | Double / BigDecimal | 金额用 BigDecimal |
| 布尔 | Boolean | |
| null | 对应包装类型(如 Integer) | 用包装类区分 null 与 0 |
| 混合数组 | List<Object> | 尽量避免 |
序列化注解怎么选
Java 生态常用三套 JSON 库,注解写法不同:
| 库 | 注解 | 示例 |
|---|---|---|
| Jackson | @JsonProperty("name") | 最主流,Spring 默认 |
| Gson | @SerializedName("name") | Android 常用 |
| 原生 | 字段名需与 JSON 一致 | 不推荐,灵活性差 |
Spring Boot 项目默认 Jackson,下面示例都用 Jackson。
一步步生成(无需装插件)
用本站 JSON 转 Java 工具,浏览器本地完成,JSON 不上传:
- 打开 JSON 转 Java。
- 粘贴 JSON(对象或数组)。
- 配置:
- 根类名(如
User、OrderResponse); - 包名(如
com.example.dto); - 是否生成 Lombok
@Data(省 getter/setter); - 注解风格(Jackson / Gson)。
- 根类名(如
- 点击转换,得到完整 Java 类,可直接粘进项目。
- 需要其他语言?可再用 JSON 转 Go 或 JSON 转 TypeScript。
完整例子
输入 JSON:
{
"id": 1024,
"name": "Alice",
"vip": true,
"tags": ["java", "api"],
"address": {
"city": "Shanghai",
"zip": "200000"
}
}
生成的 Java 类(Jackson + Lombok):
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class User {
@JsonProperty("id")
private Long id;
@JsonProperty("name")
private String name;
@JsonProperty("vip")
private Boolean vip;
@JsonProperty("tags")
private List<String> tags;
@JsonProperty("address")
private Address address;
}
@Data
public class Address {
@JsonProperty("city")
private String city;
@JsonProperty("zip")
private String zip;
}
进阶建议
- 金额用
BigDecimal:double有精度问题,涉钱务必用BigDecimal。 - 大整数用
Long:JSON 数字超过int范围(21 亿)会溢出。 - 先格式化:杂乱 JSON 先用 JSON 格式化工具 整理,类型推断更准。
- 区分 null 与零值:用包装类(
Integer而非int),否则无法判断字段是否返回。 - 时间字段:JSON 时间多为字符串,Java 用
String或LocalDateTime+ 自定义反序列化器。
常见问题
Q:数组元素类型不一致怎么办?
用 List<Object>,自己再判断;或推动接口方统一结构。
Q:字段名是蛇形 user_name,Java 要用驼峰怎么办?
用 @JsonProperty("user_name") 映射,Java 字段写 userName 即可。
Q:要不要 Lombok? 团队统一用 Lombok 能大幅减少样板代码;若项目禁用 Lombok,工具也可生成普通 getter/setter。
Q:List 和数组选哪个?
优先 List<T>,反序列化更灵活、支持动态长度;除非有明确性能/互操作要求才用数组。
小结
JSON 转 Java 实体类 = 按类型映射生成带 Jackson/Gson 注解的 POJO,注意金额用 BigDecimal、大数用 Long、null 用包装类。用本站的 JSON 转 Java 工具 在本地一键生成,JSON 不上传,更适合处理含敏感字段的接口数据。
相关工具
相关文章
如何把 JSON 快速转成 Go struct(含 json tag 与嵌套类型)
有一份 JSON 接口返回,想生成对应的 Go 结构体?本文讲解 JSON 转 Go struct 的类型映射规则,并一步步用本地转换工具生成带 json tag 的代码。
HTML 转 JSX 完全指南:React 开发者必备技巧
深入理解 HTML 与 JSX 的差异,掌握 className、style 对象、驼峰属性等转换要点,快速将 HTML 片段迁移到 React 项目。
正则表达式匹配不上?排查这 6 个常见坑
正则表达式不匹配、regex匹配失败时如何排查?本文详解贪婪量词、标志位遗漏、特殊字符转义、环视断言、换行符处理、Unicode属性6大常见坑,附前后对比示例,帮你快速定位正则调试问题。