2013-12-13 5 views
2

Я использую Spring Framework и пытаюсь выполнить запрос по почте. Мой метод почты принимает URL-адрес, HttpMethod и параметры, которые входят в тело запроса.Spring RESTtemplate POST

ПРИМЕЧАНИЕ. URL-адрес URL, переданный в сети. POSTRequest (URL, .., ...) отличается для каждого вызова.

Теперь, если я называю этот метод с одним параметром, как так ... (он прекрасно работает!)

//with one parameter 
MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>(); 
postParams.add("id", "524cd432539ed"); 
network.POSTRequest(URL, HttpMethod.POST, postParams); 

, но если есть два параметра, как так .... (он выдает эту ошибку)

org.springframework.web.client.HttpServerErrorException: 500 Внутренняя ошибка сервера

//with two parameters 
MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>(); 
postParams.add("id", "crisp"); 
postParams.add("name", "honey"); 
network.POSTRequest(URL, HttpMethod.POST, postParams); 

Это метод POSTRequest

public Object POSTRequest(String URL, HttpMethod method, MultiValueMap<String, String> postParams){ 
      HttpEntity<?> requestEntity = 
       new HttpEntity< MultiValueMap<String, String> >(postParams, getHeaders()); 
     RestTemplate restTemplate = new RestTemplate(); 
     List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >(); 

     messageConverters.add(new MappingJacksonHttpMessageConverter()); 
     restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
     restTemplate.setMessageConverters(messageConverters); 

     System.out.println(requestEntity.toString()); 
     ResponseEntity result = 
       restTemplate.exchange(URL, method, requestEntity, APIResponse.class) ; 
     return result.getBody(); 
    } 
+0

Давайте посмотрим ваши регулятора, –

+0

протестировали вы Почте конечную точку вручную с помощью плагина POST для браузера или 'wget'or' curl' с использованием одного или нескольких параметров? Это может быть конечная точка на двух параметрах. – nickdos

+0

Да, я сделал запрос, используя postman (chrome extension) и успешно. –

ответ

2

Это не очень хороший способ установки преобразователей сообщений:

List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >(); 
// empty list created 

messageConverters.add(new MappingJacksonHttpMessageConverter()); 
// list has 1 elem now 

restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
// adds StringHttpMessageConverter to restTemplate converter list 

restTemplate.setMessageConverters(messageConverters); 
// replaces restTemplate converter list with your custom list containing MappingJacksonHttpMessageConverter only 
// original list containing StringHttpMessageConverter is LOST 

Вы должны лучше использовать последовательный подход к этому:

List< HttpMessageConverter<?> > messageConverters = new ArrayList< HttpMessageConverter<?> >(); 
// empty list created 

messageConverters.add(new MappingJacksonHttpMessageConverter());  
messageConverters.add(new StringHttpMessageConverter()); 

restTemplate.setMessageConverters(messageConverters); 
+0

Это не решение, но, безусловно, полезный совет. –

+1

У меня проблема. Не имеет ли запрос один или два параметра. Дело в том, что вызовы api различны. Один вызов api принимает массивы, а другой - нет. Это основная проблема. –

Смежные вопросы