2013-07-24 138 views
2

是否可以使用Spring RestTemplate将原始JSON传递给Rest API?可能使用Spring RestTemplate将原始JSON传递给Rest API?

我试图如下:

List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>(); 
httpMessageConverters.add(new MappingJacksonHttpMessageConverter()); 
restTemplate.setMessageConverters(httpMessageConverters); 
String jsonText = // raw JSON 
httpHeaders.setContentType(MediaType.APPLICATION_JSON); 
HttpEntity<?> entity = new HttpEntity<Object>(jsonText, httpHeaders); 
restTemplate.exchange(url, HttpMethod.POST, entity, responseClass); 

当我调用这个要求,我得到一个HTTP 400错误响应,意思是错误的请求。但是,所有标题和JSON正文与使用我拥有的HTTP客户端提交的相同。

相比之下,下面当我创建了MyRequest对象,并设置它的HttpEntity正常工作:

List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>(); 
    httpMessageConverters.add(new MappingJacksonHttpMessageConverter()); 
    restTemplate.setMessageConverters(httpMessageConverters); 
    MyRequest myRequest = new MyRequest(); 
    httpHeaders.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<?> entity = new HttpEntity<Object>(myRequest, httpHeaders); 
    restTemplate.exchange(url, HttpMethod.POST, entity, responseClass); 

因此,我想知道我怎么能以String格式使用原始JSON调用我的REST API?

+0

你试过没有设置信息转换器,因为您不希望您的信息被转换成什么做?另外,为什么不让它成为'HttpEntity '? –

回答

0

这是方法

  String url = String.format("https://SITE"); 
      RestTemplate template = new RestTemplate(); 
      template.getMessageConverters().add(new StringHttpMessageConverter()); 

      String valor ="{\"cmd\":\"123\", \"includeImei\":\"true\"}"; 

      HttpHeaders headers = new HttpHeaders(); 
      headers.setContentType(MediaType.APPLICATION_JSON); 
      headers.set("Authenticate", "TOKEN"); 


      HttpEntity<String> entity = new HttpEntity<String>(valor, headers); 
      URI valoresdevueltos = template.postForLocation(url, entity); 
+0

您能否详细说明您的答案并添加一些细节? – abarisone

相关问题