在Java后端开发中,接口通常返回JSON格式数据。要把这些响应转换成可操作的对象,需要先理解JSON的结构,再设计对应的DTO类并通过映射工具完成绑定。本文以Jackson为例,说明从结构解析到DTO映射的完整做法。

一、分析JSON响应结构
假设某接口返回如下JSON,其中包含用户基本信息和订单列表:
{
"user_name": "张三",
"age": 28,
"orders": [
{ "order_id": "A001", "amount": 99.5 },
{ "order_id": "A002", "amount": 50.0 }
]
}
可以看出,这是一个对象,包含字符串、数字和一个嵌套数组。数组中的每个元素又是对象。
二、定义Java DTO类
根据结构,我们定义两个类。字段名与JSON不一致时,使用@JsonProperty注解映射。
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
public class UserDTO {
@JsonProperty("user_name")
private String userName;
private int age;
@JsonProperty("orders")
private List<OrderDTO> orders;
// getter和setter
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public List<OrderDTO> getOrders() { return orders; }
public void setOrders(List<OrderDTO> orders) { this.orders = orders; }
}
class OrderDTO {
@JsonProperty("order_id")
private String orderId;
private double amount;
public String getOrderId() { return orderId; }
public void setOrderId(String orderId) { this.orderId = orderId; }
public double getAmount() { return amount; }
public void setAmount(double amount) { this.amount = amount; }
}
三、使用Jackson完成映射
通过ObjectMapper可将JSON字符串反序列化为DTO对象。
import com.fasterxml.jackson.databind.ObjectMapper;
public class Demo {
public static void main(String[] args) throws Exception {
String json = "{"user_name":"张三","age":28,"orders":[{"order_id":"A001","amount":99.5}]}";
ObjectMapper mapper = new ObjectMapper();
UserDTO user = mapper.readValue(json, UserDTO.class);
System.out.println(user.getUserName());
System.out.println(user.getOrders().get(0).getOrderId());
}
}
四、常见注意点
- 字段缺失不会报错,对应属性为null,可设置
@JsonIgnoreProperties(ignoreUnknown = true)忽略未知字段。 - 日期类型建议使用
@JsonFormat指定格式。 - 嵌套数组必须定义元素类型的DTO,否则无法解析。
合理设计DTO结构并配合注解,能大幅降低接口对接成本。
小结
先读结构、再写类、最后用工具绑定,是处理JSON响应映射的基本思路。掌握这些方法后,复杂接口也能平稳接入。