웹 서비스에서 JSON을 읽고 선택한 비율로 웹 사이트에서 테이블을 준비하는 간단한 통화 변환기를 작성했습니다.RestTemplate을 매핑 대신 매핑하는 필드
지금까지 요금 클래스에는 각 비율에 대한 필드가 있었지만 Map
으로 변경하기로 결정했습니다. Map
을 사용하여 전체 수업을 다시 작성했지만 RestTemplate
을 (를) JSON
데이터를 HashMap에 매핑 할 수 없습니다. 전체 필드는 null
으로 간주됩니다. RestTemplate
또는 ObjectMapper
을 매핑하여 JSON
에서 Map
으로 매핑하려면 어떻게해야합니까?
Example JSON string that I am trying to map
저장소 클래스 I는 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;
}
}
환율 클래스 : 패키지 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;
}
}
내가 매핑 할 수 없습니다입니다
Map
와
요금 클래스 (환율 클래스의 필드) : 패키지 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