当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring RestTemplate获取JSON对象?

东郭自珍
2023-03-14

我用的是swapi。在Spring Boot中获取应用程序数据的dev API。我需要用一个行星的名字来获取它的信息。因此,我使用下一个url:https://swapi.dev/api/planets/?search=Tatooine.JSON结果如下所示:

{
    "count": 1, 
    "next": null, 
    "previous": null, 
    "results": [
        {
            "name": "Tatooine", 
            "rotation_period": "23", 
            "orbital_period": "304", 
            "diameter": "10465", 
            "climate": "arid", 
            "gravity": "1 standard", 
            "terrain": "desert", 
            "surface_water": "1", 
            "population": "200000", 
            "residents": [
                "http://swapi.dev/api/people/1/", 
                "http://swapi.dev/api/people/2/", 
                "http://swapi.dev/api/people/4/", 
                "http://swapi.dev/api/people/6/", 
                "http://swapi.dev/api/people/7/", 
                "http://swapi.dev/api/people/8/", 
                "http://swapi.dev/api/people/9/", 
                "http://swapi.dev/api/people/11/", 
                "http://swapi.dev/api/people/43/", 
                "http://swapi.dev/api/people/62/"
            ], 
            "films": [
                "http://swapi.dev/api/films/1/", 
                "http://swapi.dev/api/films/3/", 
                "http://swapi.dev/api/films/4/", 
                "http://swapi.dev/api/films/5/", 
                "http://swapi.dev/api/films/6/"
            ], 
            "created": "2014-12-09T13:50:49.641000Z", 
            "edited": "2014-12-20T20:58:18.411000Z", 
            "url": "http://swapi.dev/api/planets/1/"
        }
    ]
}

现在,在Java中,我使用服务中的下一个代码:

public PlanetDTO getPlanetByName(String name){
   String url = "https://swapi.dev/api/planets/?search=Tatooine";
   RestTemplate restTemplate = new RestTemplate();
   Object object = restTemplate.getForObject(url, Object.class);
   // I don't know how to get the array of results
}

我只需要得到结果的数组,但是,我如何从对象得到结果的数组?

共有1个答案

益楷
2023-03-14

因为您使用的是Spring Boot,所以它通常与用于JSON解析的便捷工具捆绑在一起。Spring Boot将默认jackson连接到应用程序中。

首先,您需要一个(简化的)POJO响应模型。

@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponsePojo {
   @JsonProperty("<jsonFieldName>") // only required, if fieldName != jsonFieldName
   private List<String> residents; 

/* getter & setter ommitted */
}

在你的呼叫代码中,使用

ResponsePojo response = restTemplate.getForObject(url, ResponsePojo.class);
response.getResidents() gives you access to the contents of 'resident' array

幕后发生了什么?

RestTemplate发送您的请求,并尝试将响应解析为您的ResponsePojo对象。由于pojo是响应的简化表示,我们提供了注释@JsonIgnoreProperties(ignoreUnknown=true)。这告诉解析器,它应该简单地忽略json中无法映射到pojo的任何字段。由于提供了一个字段,其确切名称与json中的相同,因此解析器能够相应地识别和映射它们。

 类似资料:
  • 问题内容: 我正在struts上从事Web服务。现在我想要json对象使用其键值。然后,我必须发布类似数组的内容作为响应。我不知道如何在Struts中做到这一点。我知道如何在Servlet中执行此操作。因此,我使用的是我尝试过的以下代码,但我认为Struts中的代码有所不同。 因此,如何在Struts中做到这一点。还请告诉我如何解析json数组作为响应。 问题答案: 使用JSON无需将JSON发送

  • 问题内容: 我想做的是从而不是从Volley库中使用一些数据。 以下是用于从服务器中获取JSON对象的代码。 我试图改变到后改为。但这并没有解决。 问题答案: 中的url 不是可选的,并且JSONObject参数用于将带有请求的参数发布到url。 从文档中:http : //afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest

  • 问题内容: 我有一个JSON对象,其中有一个字段是生日日期: 但是该方法在JSONObject中不存在。 如何在用户对象中设置出生日期? 问题答案: 您可能会喜欢以下内容, 希望对您有所帮助:)

  • 问题内容: 我正在与集成的android应用程序上工作。我正在使用fql查询从Facebook获取信息。我的fql方法是 myjson对象具有我想要的所有信息。像这样 问题是如何将该信息存储到不同的阵列中? 请为此修改一些代码。 问题答案: 检查http://www.androidhive.info/2012/01/android-json-parsing- tutorial/

  • 问题内容: 我想用动态表创建Jasper报告。 例如: 用户1-5张桌子 用户2-3张桌子 用户3-6桌 我尝试使用列表选项,但是我的表不可见,并且页面数正在增加。 杰森数据。 是我的报表数据集,是列表数据,也是我要在表中显示的数据。 注意 如果我删除 并把 然后,使用空值创建两个表。 问题答案: 对主报表的查询将其保留为空白(并保留mainDataSet节点) 将字段定义为 该传递给 因此指向

  • 我想从API中获取countynames,它返回嵌套对象; 等等,有200多个国家,每个县都有自己的“编号”。最后,我想列出所有“姓名”信息。我想我应该使用JsonDeserializer,但不幸的是我不能。