2017-03-29 4 views
0

サービスを使用するためにrestTemplateを使用しています。RestTemplateがAPPLICATION_FORM_URLENCODEDおよびRequest Pojoで機能しない

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 
HttpEntity request = new HttpEntity(countryRequest, headers);     
CountryResponse response = restTemplate.postForObject(countryURL, request, CountryResponse.class); 

countryRequestは単なる文字列フィールドcodeとPOJOの目的です。 restTemplatejackson2HttpMessageConverterFormHttpMessageConvertermessageConvertersにあります。

私は次の例外取得しています:

org.springframework.web.client.RestClientException: 
    Could not write request: no suitable HttpMessageConverter found for request type [CountryRequest] and content type [application/x-www-form-urlencoded] 

をしかし、私はMultiValueMapの代わりCountryRequestを使用している場合、私は200応答を得た:

MultiValueMap<String, String> map= new LinkedMultiValueMap<>(); 
map.add(code, "usa"); 
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity(map, headers); 

はここMultiValueMapアプローチを交換する方法はあります?

答えて

0

リクエストのシリアライズには、通常のFORMデータとJSONオブジェクトの2種類があります。 フォームデータは、POSTペイロードに単純なキーと値のペアの文字列を送信する最も簡単で最古の方法です。しかし、ネストされたプロパティやリストを持つオブジェクトや、マップを送信する必要があるときは、問題になります。 それで、誰もが簡単にPOJOオブジェクトに逆シリアル化できるJSON形式を使用しようとしています。これは現代のウェブの事実上の標準です。

何らかの理由でRestTemplateCountryRequestをシリアル化しようとしましたが、それをFORMデータにシリアル化する方法がわかりません。 あなたが送信しているPOJOでrequestを交換してみてください。

CountryRequest request = new CountryRequest();     
CountryResponse response = restTemplate.postForObject(countryURL, request, CountryResponse.class); 

その後RestTemplateは、(デフォルトの動作です)JSONにCountryRequestをシリアル化しようとします。

関連する問題