7

デスクトップアプリでRestTemplateを使用してRESTサービスを使用すると問題が発生しますが、Webアプリで使用すると問題が発生しません。

これはデバッグログです

15:30:40.448 [main] DEBUG o.s.web.client.RestTemplate - Reading [java.util.List] as "application/json" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@98adae2]
15:30:40.452 [main] DEBUG httpclient.wire.content - << "[{"name":"Indonesia","id":1},{"name":"AlaySia","id":2},{"name":"Autraliya","id":3}]"

スレッド「メイン」の例外java.lang.ClassCastException:java.util.LinkedHashMapをcom.mgm.domain.Countryにキャストできません

そして、これは私が使用するコードです。

 String url = "http://localhost:8080/mgm/country";
    List<MediaType> mediaTypes = new ArrayList<MediaType>();
    mediaTypes.add(MediaType.APPLICATION_JSON);
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(mediaTypes);
    HttpEntity<Country> httpEntity = new HttpEntity<Country>(null, headers);
    try {
        ResponseEntity<List> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, List.class);
        List<Country> countries = responseEntity.getBody();
        System.out.println(countries.get(0).getName());

    } catch (RestClientException exception) {
        exception.printStackTrace();
    }

上記のコードは、Webアプリに配置してもエラーになりません。Spring Rest MVCを使用してJSONを提供し、RestTemplateで使用します。

java.util.LinkedHashMapジャクソンがに変換するときに問題があると思いますCountry。実際countries.get(0)にはLinkedHashMapタイプがないようで、次のようなメソッドCountryの1つを呼び出すと問題が発生しますCountry.getName()

4

1 に答える 1

22

代わりに配列を使用してみてください。

String url = "http://localhost:8080/mgm/country";
List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(MediaType.APPLICATION_JSON);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(mediaTypes);
HttpEntity<Country> httpEntity = new HttpEntity<Country>(null, headers);
try {
    ResponseEntity<Country[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Country[].class);
    Country[] countries = responseEntity.getBody();
    System.out.println(countries[0].getName());

} catch (RestClientException exception) {
    exception.printStackTrace();
}
于 2011-08-17T13:57:53.453 に答える