java - 如何从 gson 获取嵌套数据?
问题描述
我对外部 RESTful api 做了一个 get 请求,并接收到一个具有以下结构的 json 对象作为响应:
{
"data": {
"id": 1,
"name": "John Doe",
"email": "doe@john.com",
"urlPicture": "urlPicture.com/82819",
"address": {
"street": "My street",
"number": "29",
"city": "Nurnberg",
"country": "Germany"
}
}
}
我不需要此响应的所有内容,我只想将一些字段保存在数据库中。
我的 POJO 类类似于这个伪代码:
public class Data{
private User user;
// getters and setters
}
public class User{
private int id;
private String name;
private String urlPicture;
private String country;
// getters and setters
}
但是,当我尝试提取我想要的字段时,我在这个字段中收到 null
public void testResponse(){
RestTemplate restTemplate = new RestTemplate();
Data data = new Data();
User user = new User();
Gson gson = new Gson();
String response = restTemplate.getForObject(
"https://apifrommyrequest.com/user/{id}",
String.class,
73442);
user = gson.fromJson(response, User.class);
System.out.println(user);
}
```
My output:
22:20:57.641 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET https://apifrommyrequest.com/user/73442
22:20:57.672 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[text/plain, application/json, application/*+json, */*]
22:20:58.243 [main] DEBUG org.springframework.web.client.RestTemplate - Response 200 OK
22:20:58.247 [main] DEBUG org.springframework.web.client.RestTemplate - Reading to [java.lang.String] as "application/json;charset=UTF-8"
Data(id=0, name=null, urlPicture=null, country=null)
I really don't know how to do anymore.
解决方案
试试下面的代码。您不能直接访问国家/地区,它是放置在嵌套对象中的值。而且由于响应正文作为数据返回,因此您无法将其转换为 User 对象。首先,您需要将其转换为 Data 对象。
public class User {
private int id;
private String name;
private String urlPicture;
private Address address;
// getters and setters
}
public class Address {
private String country;
// getters and setters
}
public void testResponse(){
RestTemplate restTemplate = new RestTemplate();
Data data = new Data();
User user = new User();
Gson gson = new Gson();
String response = restTemplate.getForObject(
"https://apifrommyrequest.com/user/{id}",
String.class,
73442);
data = gson.fromJson(response, Data.class);
System.out.println(data);
}
推荐阅读
- html - 如何使html页面根据时间更改背景颜色
- javascript - 如何解决 Javascript 中的警报引用错误?
- java - 如何为托管在 Kubernetes 中的多个应用程序选择 Kafka 事务 ID?
- react-native - 注册/登录后反应本机路由器通量路由
- c++ - 运算符重载取决于模板类型和虚拟运算符
- c# - 具有多态性的自定义 JSON 反序列化
- html5-canvas - 选择框被拖动,但不是对象
- mysql - 如何插入批量记录
- java - 如何忽略列数中的最后一列?我正在使用 Apache POI 读取 excel 数据
- java - 如何在java中的映射中查找值的出现