Spring-android RestTemplate帖子失败了

时间:2013-06-06 22:19:04

标签: android json spring http-post resttemplate

问题

我正在考虑将现有的http post方法转换为spring-android,但我失败了。

JSONObject defaultJsonObject = new JSONObject();
defaultJsonObject.put("ln", "Kiat");
defaultJsonObject.put("CountryName", "Malaysia");
defaultJsonObject.put("CityName", "Kuala Lumpur");

这是我现有的http帖子,它正在运作,并将形成一个帖子正文:[json={"ln":"Kiat","CountryName":"Malaysia","CityName":"Kuala Lumpur"}]

List<NameValuePair> postParams = new ArrayList<NameValuePair>();
 postParams.add(new BasicNameValuePair("json", jsonObject.toString()));
 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
 System.out.println("post param: " + postParams.toString());
 post.setEntity(entity);
 post.setHeader("Accept", "application/json");

但是当我使用RestTemplate转换为Spring-android时失败了。即使我已经设法形成帖子正文[json={"ln":"Kiat","CountryName":"Malaysia","CityName":"Kuala Lumpur"}]我仍然得到500内部服务器错误

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
List<NameValuePair> postParams1 = new ArrayList<NameValuePair>();
postParams1.add(new BasicNameValuePair("json", jsonObject.toString()));
HttpEntity<?> requestEntity = new HttpEntity<Object>(postParams1, requestHeaders);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity,String.class)

帖子正文格式将是这样的

[json = {“ln”:“Kiat”,“CountryName”:“Malaysia”,“CityName”:“Kuala Lumpur”}]

1 个答案:

答案 0 :(得分:0)

(在问题编辑中回答。转换为社区维基回答。请参阅Question with no answers, but issue solved in the comments (or extended in chat)

OP写道:

  

问题解决了。的解决方案:

     

要使用RestTemplate,如果您不确定需要哪些转换器,则必须在构造函数中设置为TRUE。 RestTemplate restTemplate = new RestTemplate(true);有了这个,它将包括所有标准转换器。但它有点浪费,因为你必须包括所有不需要的转换器。

     

对于我的情况,经过测试,我发现我需要两个转换器才能使我的HTTP帖子成功

restTemplate.getMessageConverters().add(new FormHttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
  

我不知道我们需要什么样的转换器组合;也许有人有更深入的解释?