Ich habe einen einfachen Währungsrechner geschrieben, der JSON vom Webservice liest und die Tabelle auf der Website mit ausgewählten Verhältnissen erstellt.RestTemplate Zuordnung zu Map anstelle von Feldern
Bis jetzt hatte meine Klasse Preise Feld für jedes Verhältnis, aber ich entschied, es zu Map
zu ändern. Ich schrieb die gesamte Klasse unter Verwendung Map
um, aber RestTemplate
kann JSON
Daten meiner HashMap nicht zuordnen. Das gesamte Feld wird als null
betrachtet. Wie kann ich RestTemplate
oder ObjectMapper
neu konfigurieren, um die Zuordnung JSON
zu Map
zu aktivieren?
Example JSON string that I am trying to map
Repository Klasse Ich bin mit JSON
zu lesen und es auf dem Objekt zur Karte: Paket com.github.gromo13.currencyConverter.repository;
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;
}
}
Währungsklasse I JSON-Daten am Mapping: Paket com.github.gromo13.currencyConverter.model;
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;
}
}
Preise Klasse (Feld in der Klasse Währung) mit Map
, dass ich nicht in der Lage bin zur Karte: Paket 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());
}
}
Meine eigentliche RestTemplate Konfiguration: Paket 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;
}
}
Ja. Ich habe die Struktur von JSON vergessen, die ich kartiere. Das war so einfach zu lösen. Vielen Dank. – Gromo