如何定义适配指定JSON的Java DTO结构及RestTemplate调用方式?
适配JSON响应的Java DTO结构与RestTemplate调用示例
从API获取的JSON响应如下:
[ {"employee":{"id":1,"name":"somu","employee_company":{"id":100,"name":"comp1"}}}, {"employee": {"id":2,"name":"raju","employee_company":{"id":101,"name":"comp2"}}}, {"employee":{"id":3,"name":"nagu","employee_company":{"id":105,"name":"comp5"}}} ]
针对这个JSON结构,下面提供两种可行的Java DTO定义方案,以及对应的RestTemplate调用写法:
方案1:用外层DTO包裹员工对象
DTO结构代码
// 公司信息实体类 class EmployeeCompany { private Integer id; private String name; // 需生成Getter、Setter,以及无参/有参构造方法 } // 员工信息实体类 class Employee { private Integer id; private String name; private EmployeeCompany employee_company; // 需生成Getter、Setter,以及无参/有参构造方法 } // 外层包装DTO,对应JSON里每个{"employee": ...}节点 class EmployeeWrapperDTO { private Employee employee; // 需生成Getter、Setter,以及无参/有参构造方法 }
RestTemplate调用写法
因为返回的是泛型列表,需要用ParameterizedTypeReference指定具体类型:
List<EmployeeWrapperDTO> employeeList = restTemplate.exchange( "你的API地址", HttpMethod.GET, null, new ParameterizedTypeReference<List<EmployeeWrapperDTO>>() {} ).getBody();
方案2:直接用Map嵌套接收(无外层DTO)
DTO结构代码
只需要定义员工和公司的实体类即可:
// 公司信息实体类 class EmployeeCompany { private Integer id; private String name; // 需生成Getter、Setter,以及无参/有参构造方法 } // 员工信息实体类 class Employee { private Integer id; private String name; private EmployeeCompany employee_company; // 需生成Getter、Setter,以及无参/有参构造方法 }
RestTemplate调用写法
直接接收为List<Map<String, Employee>>类型,后续遍历取出员工对象:
List<Map<String, Employee>> responseList = restTemplate.exchange( "你的API地址", HttpMethod.GET, null, new ParameterizedTypeReference<List<Map<String, Employee>>>() {} ).getBody(); // 遍历处理数据 for (Map<String, Employee> item : responseList) { Employee employee = item.get("employee"); // 此处可操作员工数据 }
两种方案都能正常解析目标JSON:方案1结构更清晰,适合后续功能扩展;方案2写法简洁,适合快速开发场景。
内容的提问来源于stack exchange,提问作者passionate developer
相关产品推荐
相关产品推荐

