尝试使用 API 中的 JSON 文档时出现多个嵌套异常
Multiple nested exceptions while trying to consume JSON documents from API's
我创建了一个简单的 Spring 引导应用程序,我试图在其中使用 API 至 JSON 信息。下面您可以看到我在服务 Class 上使用 RestTemplate 创建的简单代码。我面临的问题是,当我使用下面的 API url 时,出现以下嵌套异常。
如果我使用的 API url 信息较少,则一切正常。我做错了什么?
控制器 CLASS
package com.andrekreou.iot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class RestSpringBootController {
private final Service service;
@Autowired
public RestSpringBootController(Service service) {
this.service = service;
}
@GetMapping(path = "/opap")
public List<Object> getWeather(){
return service.getWeather();
}
}
服务CLASS
package com.andrekreou.iot;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
import java.util.List;
@org.springframework.stereotype.Service
public class Service {
public List<Object> getWeather(){
String url = "https://api.opap.gr/draws/v3.0/5104/last-result-and-active";
RestTemplate restTemplate = new RestTemplate();
Object[] weather = restTemplate.getForObject(url, Object[].class);
return Arrays.asList(weather);
}
}
问题出在这行代码中:
Object[] weather = restTemplate.getForObject(url, Object[].class);
您正在映射这个 JSON :
{
"last": {
"gameId": 5104,
"drawId": 2446,
"drawTime": 1653850800000,
"status": "results",
"drawBreak": 1800000,
"visualDraw": 2446,
"pricePoints": {
"amount": 0.5
},
"winningNumbers": {
"list": [
1,
9,
19,
22,
33
],
"bonus": [
1
]
},
...
}
这不是数组,它是一个对象,这就是您在问题中描述错误的原因。
将以上代码行更改为:
Object weather = restTemplate.getForObject(url, Object.class);
它应该可以正常工作。
我创建了一个简单的 Spring 引导应用程序,我试图在其中使用 API 至 JSON 信息。下面您可以看到我在服务 Class 上使用 RestTemplate 创建的简单代码。我面临的问题是,当我使用下面的 API url 时,出现以下嵌套异常。
如果我使用的 API url 信息较少,则一切正常。我做错了什么?
控制器 CLASS
package com.andrekreou.iot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class RestSpringBootController {
private final Service service;
@Autowired
public RestSpringBootController(Service service) {
this.service = service;
}
@GetMapping(path = "/opap")
public List<Object> getWeather(){
return service.getWeather();
}
}
服务CLASS
package com.andrekreou.iot;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
import java.util.List;
@org.springframework.stereotype.Service
public class Service {
public List<Object> getWeather(){
String url = "https://api.opap.gr/draws/v3.0/5104/last-result-and-active";
RestTemplate restTemplate = new RestTemplate();
Object[] weather = restTemplate.getForObject(url, Object[].class);
return Arrays.asList(weather);
}
}
问题出在这行代码中:
Object[] weather = restTemplate.getForObject(url, Object[].class);
您正在映射这个 JSON :
{
"last": {
"gameId": 5104,
"drawId": 2446,
"drawTime": 1653850800000,
"status": "results",
"drawBreak": 1800000,
"visualDraw": 2446,
"pricePoints": {
"amount": 0.5
},
"winningNumbers": {
"list": [
1,
9,
19,
22,
33
],
"bonus": [
1
]
},
...
}
这不是数组,它是一个对象,这就是您在问题中描述错误的原因。
将以上代码行更改为:
Object weather = restTemplate.getForObject(url, Object.class);
它应该可以正常工作。