2013-03-07 35 views
15

Tôi đã chuyển cặp giá trị khóa vào phần thân của yêu cầu đăng bài. Nhưng khi tôi chạy mã của mình, tôi nhận được lỗi là "Không thể viết yêu cầu: không tìm thấy HttpMessageConverter phù hợp cho loại yêu cầu [org.springframework.util.LinkedMultiValueMap] và loại nội dung [text/plain]"Cách chuyển cặp giá trị khóa bằng cách sử dụng resttemplate trong java

Mã của tôi là như sau:

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

Trả lời

20

FormHttpMessageConverter được sử dụng để chuyển đổi các đối tượng yêu cầu HTTP. Các loại phương tiện mặc định cho bộ chuyển đổi này là application/x-www-form-urlencodedmultipart/form-data. Bằng cách xác định các nội dung kiểu như text/plain, bạn đang nói RestTemplate sử dụng StringHttpMessageConverter

headers.setContentType(MediaType.TEXT_PLAIN); 

Nhưng chuyển đổi mà không hỗ trợ chuyển đổi một MultiValueMap, đó là lý do tại sao bạn đang nhận được lỗi. Bạn có một cặp đôi tùy chọn. Bạn có thể thay đổi nội dung-type để application/x-www-form-urlencoded

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); 

hoặc bạn không thể thiết lập các content-type và để RestTemplate xử lý nó cho bạn. Nó sẽ xác định điều này dựa trên đối tượng bạn đang cố chuyển đổi. Hãy thử sử dụng yêu cầu sau làm phương án thay thế.

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

Và đảm bảo rằng resttemplate được định cấu hình bằng FormHttpMessageConverter nếu bạn định sử dụng APPLICATION_FORM_URLENCODED quá – chrismarx

Các vấn đề liên quan