2017-12-21 15 views
0

WebサービスからJSONを読み込み、選択した比率でWebサイト上のテーブルを準備する簡単な通貨コンバータを作成しました。RestTemplateをマップの代わりにマップにマッピングする

これまで、私の料金クラスには各比率の項目がありましたが、私はMapに変更することにしました。 Mapを使用してクラス全体を書き直しましたが、RestTemplateJSONのデータを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; 
    } 
} 

答えて

1

これは今のところうまくいかないでしょう。あなたは完全にそれを取り除くと使用取得することができ、Ratesクラスを必要としません:

private Map<String, Double> rates 

通貨クラスに。

+0

うん。私はマッピングしているJSONの構造を忘れていました。それはとても簡単に解決できました。ありがとうございました。 – Gromo

関連する問題