我想从外部API获取国家的详细信息,并使用Gson将从get请求中接收到的数据设置为Country类。问题是在响应中,货币键的值介于[]之间(请参见下文),并且在某些情况下,货币名称值之间存在空格,这会导致以下错误 com.google.gson.stream.MalformedJsonException:第1行第41列路径$.currencies[0]处的对象未终止。name:
“货币”:[{“代码”:“BGN”,“名称”:“保加利亚列弗”,“符号”:“лв"}]
@RestController
public class CountryController {
@Autowired
private RestTemplate restTemplate;
private static String baseURL = "https://restcountries.com/v2/";
public Object[] getCountryDetails(String countryName){
Object[] countryDetails = restTemplate.getForObject(baseURL+"name/"+countryName+"?fields=name,alpha2Code,alpha3Code,capital,currencies", Object[].class);
return countryDetails;
}
public Country createCountryObject(String countryName) {
String response = Arrays.asList(getCountryDetails(countryName)).get(0).toString();
Gson g = new Gson();
JsonReader reader = new JsonReader(new StringReader(response.trim()));
reader.setLenient(true);
Country country = g.fromJson(reader, Country.class);
return country;
}
@GetMapping("/")
public String getAll(){
Country country = createCountryObject("bulgaria");
return country.getName();
}
}
Country.java:
package country.neighbours.tour.models;
import java.util.List;
public class Country {
private String name;
private String alpha2Code;
private String alpha3Code;
private List<String> borders;
private Object[] currencies;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getBorders() {
return borders;
}
public void setBorders(List<String> borders) {
this.borders = borders;
}
public String getAlpha2Code() {
return alpha2Code;
}
public void setAlpha2Code(String alpha2Code) {
this.alpha2Code = alpha2Code;
}
public String getAlpha3Code() {
return alpha3Code;
}
public void setAlpha3Code(String alpha3Code) {
this.alpha3Code = alpha3Code;
}
public Object[] getCurrencies() {
return currencies;
}
public void setCurrencies(Object[] currencies) {
this.currencies = currencies;
}
}
如何仅获取货币代码?
1条答案
按热度按时间4si2a6ki1#
看起来您对响应进行了两次解析;使用
restTemplate.getForObject
调用一次,然后将其结果转换为String(toString()
调用的结果很可能是而不是JSON),然后尝试使用Gson再次解析它。如果只想使用Gson,可以在
fromJson
调用中使用TypeToken
来解析响应JSON数组:也许更熟悉Spring的人也可以解释如何只使用
RestTemplate.getForObject
而不是Gson。