WebサービスからJSONを読み込み、選択した比率でWebサイト上のテーブルを準備する簡単な通貨コンバータを作成しました。RestTemplateをマップの代わりにマップにマッピングする
これまで、私の料金クラスには各比率の項目がありましたが、私はMap
に変更することにしました。 Map
を使用してクラス全体を書き直しましたが、RestTemplate
はJSON
のデータをHashMapにマップできません。全体のフィールドはnull
とみなされます。 RestTemplate
またはObjectMapper
をマッピングしてJSON
からMap
にマッピングするには、どうすればよいですか?
Example JSON string that I am trying to map
リポジトリクラスは、私がJSON
を読み取るために、物体の上にマッピングするために使用しています: パッケージcom.github.gromo13.currencyConverter.repository。私はJSONデータを使用してマッピングしています
import com.github.gromo13.currencyConverter.model.Currency;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.web.client.RestTemplate;
@Repository
public class FixerIoCurrencyRepository implements CurrencyRepository {
@Autowired
private RestTemplate restTemplate;
public void setRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Override
public Currency getCurrency(String currencyCode) {
Currency currency = restTemplate.getForObject("http://api.fixer.io/latest?base={currencyCode}", Currency.class, currencyCode);
return currency;
}
}
Currencyクラス: パッケージcom.github.gromo13.currencyConverter.model。私はマップすることができませんMap
と
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Currency {
private String base;
private String date;
private Rates rates;
public String getBase() {
return this.base;
}
public void setBase(String base) {
this.base = base;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public Rates getRates() {
return this.rates;
}
public void setRates(Rates rates) {
this.rates = rates;
}
}
料金クラス(通貨クラスのフィールド): パッケージcom.github.gromo13.currencyConverter.modelを。 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.HashMap;
import java.util.Map;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Rates {
private Map<String, Double> rates = new HashMap<>();
public void clear() {
rates.clear();
}
public void setRate(String currencyCode, double rate) {
rates.put(currencyCode.toUpperCase(), rate);
}
public double getRate(String currencyCode) {
return rates.get(currencyCode.toUpperCase());
}
}
私の実際のRestTemplate構成: パッケージcom.github.gromo13.currencyConverter.config。
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
public class Config {
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(0, mappingJackson2HttpMessageConverter());
return restTemplate;
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
return mapper;
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper());
return converter;
}
}
うん。私はマッピングしているJSONの構造を忘れていました。それはとても簡単に解決できました。ありがとうございました。 – Gromo