2013-03-07 11 views
15

Muszę podać parę wartości klucza w treści żądania. Ale po uruchomieniu mojego kodu pojawia się błąd "Nie można zapisać żądania: nie znaleziono odpowiedniego HttpMessageConverter dla typu żądania [org.springframework.util.LinkedMultiValueMap] i typu zawartości [text/plain]"Jak przekazywać parę wartości klucza za pomocą resttemplate w java

Mój kod jest w następujący sposób:

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(); 

Odpowiedz

20

FormHttpMessageConverter służy do konwersji MultiValueMap obiektów nadsyłania żądań HTTP. Domyślne typy nośników dla tego konwertera to application/x-www-form-urlencoded i multipart/form-data. Określając typ zawartości jako text/plain, mówisz RestTemplate używać StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

Ale że konwerter nie obsługuje konwersję MultiValueMap, dlatego otrzymujesz błąd. Masz kilka opcji. Można zmienić typ zawartości do application/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 

lub nie można ustawić typ zawartości i niech RestTemplate obsługiwać go dla Ciebie. Ustali to na podstawie obiektu, który chcesz przekonwertować. Spróbuj użyć następującego żądania jako alternatywy.

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

i zapewnić, że resttemplate jest skonfigurowany z FormHttpMessageConverter jeśli masz zamiar używać zbyt-APPLICATION_FORM_URLENCODED – chrismarx

Powiązane problemy