2013-11-21 21 views
5

我必須使用postForObject()方法將JSON數據從一種服務方法發送到另一種服務方法。 我在this link上看到RestTemplate上的一個例子。需要關於RestTemplate postForObject()方法的幫助

postForObject()方法有以下格式:

User returns = rt.postForObject(uri, u, User.class, vars); 

或者

User returns = rt.postForObject(uri, u, User.class); 

我想知道的是,使用postForObject()的方法,如果我們實現服務的方法來接受User對象,以後怎麼它會看起來像?

在我的項目,我有這樣的代碼

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
String uri = "http://testcode.com/myapp/api/launchservices"; 
ServiceRequest request = new ServiceRequest(); 
request.setId(UUID.randomUUID().toString()); 
.... 

我在這行收到錯誤:

ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class); 

在執行這一點,我得到這個錯誤信息:

org.springframework.web.client.HttpClientErrorException: 400 Bad Request 
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) 
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:537) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:493) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:452) 
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:302) 

我的實施方法是:

@RequestMapping(value = "/launchservices", method = RequestMethod.POST) 
@ResponseBody 
public boolean launchServices(@PathVariable ServiceRequest request) { 
    System.out.println("Request: "+request.toString()); 
    return true; 
} 

如何擺脫這種情況?什麼是URI?

回答

4

我解決了這個問題。

在該示例中,方法postForObject返回類「ServiceRequest」的目的

ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class); 

所以,實現與上述「URI」此服務的方法應返回類的對象ServiceRequest
它所需要的是,在實現方法稍作修改如下

@RequestMapping(value = "/launchservices", method = RequestMethod.POST, headers = "Accept=application/json") 
@ResponseBody 
public ServiceRequest launchServices(@RequestBody ServiceRequest request) { 
    System.out.println("Request: "+request.toString()); 
    return request; 
} 
+0

你用這個乾淨的例子爲我節省了很多時間。這是一個問題的答案,但我以此爲例。你爲我節省了很多時間,謝謝你。沒有壓力,我無法觀看日本武術比賽。 – giannisapi