2013-03-07 51 views
15

我必須在發佈請求的主體中傳遞鍵值對。但是,當我運行我的代碼時,我得到的錯誤爲「無法寫請求:沒有找到合適的HttpMessageConverter請求類型[org.springframework.util.LinkedMultiValueMap]和內容類型[文本/純]」如何在java中使用resttemplate傳遞鍵值對

我的代碼是如下:

MultiValueMap<String, String> bodyMap = new LinkedMultiValueMap<String, String>(); 
bodyMap.add(GiftangoRewardProviderConstants.GIFTANGO_SOLUTION_ID, giftango_solution_id); 
bodyMap.add(GiftangoRewardProviderConstants.SECURITY_TOKEN, security_token); 
bodyMap.add(GiftangoRewardProviderConstants.REQUEST_TYPE, request_type); 

HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.TEXT_PLAIN); 

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(bodyMap, headers); 

RestTemplate restTemplate = new RestTemplate(); 
ResponseEntity<String> model = restTemplate.exchange(giftango_us_url, HttpMethod.POST, request, String.class); 
String response = model.getBody(); 

回答

20

FormHttpMessageConverter被用於轉換MultiValueMap對象在HTTP請求發送。此轉換器的默認媒體類型爲application/x-www-form-urlencodedmultipart/form-data。通過指定內容類型爲text/plain,你告訴RestTemplate使用StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

但是,轉換器不支持轉換MultiValueMap,這就是爲什麼你所得到的錯誤。你有幾個選擇。您可以更改內容類型application/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 

,或者您不能設置內容類型,讓RestTemplate爲您處理。它將根據您嘗試轉換的對象來確定此值。嘗試使用以下請求作爲替代方法。

ResponseEntity<String> model = restTemplate.postForEntity(giftango_us_url, bodyMap, String.class); 
+0

並確保resttemplate配置了FormHttpMessageConverter如果你打算使用APPLICATION_FORM_URLENCODED too- – chrismarx 2015-11-24 16:02:47