Как правильно настроить RestTemplate, для работы в Spring?

138
12 июля 2022, 09:30

Хочу из приложения 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;
    }
}
Answer 1

Десериализация JSON из URL

Библиотека 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}

См. Десериализация строки JSON

READ ALSO
Как реализовать приоритетность в RecyclerView?

Как реализовать приоритетность в RecyclerView?

Мне нужно реализовать функцию приоритетностиТо есть как оно работает, при добавлении заметок пользователь сможет выбрать важность этой...

203
Интерпретация визуального алгоритма

Интерпретация визуального алгоритма

Подскажите пример или ключевые слова, чтобы искать в таком направлении

217
Не могу получить Scene в initialize JavaFx

Не могу получить Scene в initialize JavaFx

Не понимаю как получить Scene, для того, чтобы получить действие клавиатуры

137
Как использовать Sqlite в AsyncTask классе

Как использовать Sqlite в AsyncTask классе

В чатсности я хотел бы использовать insert в фоновом режиме то есть:

158