TransWikia.com

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

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;
    }
}

One Answer

Десериализация 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

Correct answer by user417380 on January 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP