Stack Overflow на русском Asked on January 17, 2021
Хочу из приложения Spring Boot создать запрос на стороннее API, получить ответ в виде готового объекта Currency и далее работать с ним. То что сейчас имею – restTemplate возвращает объект, но все поля у него null, если этот запрос вбиваю в строку браузера – вижу адекватный JSON ответ.
Класс CurrencyAPI, который содержит метод для работы с restTemplate:
import by.andrew.bot.telegrambotmonitor.classesRespThirdPartyAPI.Currency;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class CurrencyAPI {
private final String URL_CURRENCY_RATE = "https://www.nbrb.by/api/exrates/rates/USD?parammode=2";
private RestTemplate restTemplate;
public CurrencyAPI(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
public Currency getCurrencyRate(){
Currency currency = restTemplate.getForObject(URL_CURRENCY_RATE, Currency.class);
return currency;
}
}
И сам обьект, который должен быть создан из полученного JSON:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Currency {
private int cur_ID;
private String cur_Abbreviation;
private String cur_Name;
private Double cur_OfficialRate;
public int getCur_ID() {
return cur_ID;
}
public void setCur_ID(int cur_ID) {
this.cur_ID = cur_ID;
}
public String getCur_Abbreviation() {
return cur_Abbreviation;
}
public void setCur_Abbreviation(String cur_Abbreviation) {
this.cur_Abbreviation = cur_Abbreviation;
}
public String getCur_Name() {
return cur_Name;
}
public void setCur_Name(String cur_Name) {
this.cur_Name = cur_Name;
}
public Double getCur_OfficialRate() {
return cur_OfficialRate;
}
public void setCur_OfficialRate(Double cur_OfficialRate) {
this.cur_OfficialRate = cur_OfficialRate;
}
}
Библиотека FasterXML/jackson
позволяет десериализовать объект из различных типов источников. Например, чтобы прочитать JSON из URL можно использовать метод readValue
класса ObjectMapper
. Нужно подготовить POJO класс, в который десериализовать JSON, или, если структура заранее не известна, то можно десериализовать в Map
или Object
:
URL url = new URL("https://www.nbrb.by/api/exrates/rates/USD?parammode=2");
ObjectMapper objectMapper = new ObjectMapper();
Map map = objectMapper.readValue(url, Map.class);
System.out.println(map);
Вывод:
{Cur_ID=145, Date=2020-11-25T00:00:00, Cur_Abbreviation=USD,
Cur_Scale=1, Cur_Name=Доллар США, Cur_OfficialRate=2.5548}
Correct answer by user417380 on January 17, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP