java - 如何从gson获取嵌套数据?

标签 java spring-boot gson resttemplate

我向外部 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.

最佳答案

试试下面的代码。您不能直接访问国家/地区,它是放置在嵌套对象中的值。而且由于响应主体作为数据返回,因此您无法将其转换为用户对象。首先,您需要将其转换为数据对象。

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);
}

关于java - 如何从gson获取嵌套数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57351330/

相关文章:

java - 缺少一些东西来完成我的程序

java - 在 Maven 存储库中找不到 SpringSecurityUser 类

spring - 如何在spring jpa中以一对多关系插入数据

Spring Boot,决定为REST和JPA分别创建DTO对象

java - 自定义 boolean 反序列化器在 Gson 中不起作用

java - 映射到 JSON - 忽略特定键

java - 使用 for 循环连接构建字符串名称

Java - 遍历数组列表并输出从最高到最低的数字?

java - 如何在 JPA 存储库方法中使用部分组合键来获取数据?

java - 从sqlite中获取数据并存储在json中