需要有关RestTemplate postForObject()方法的帮助

时间:2013-11-21 06:10:40

标签: json spring-mvc resttemplate

我必须使用postForObject()方法将JSON数据从一种服务方法发送到另一种服务方法。 我在this link上的RestTemplate上看到了一个示例。

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?

1 个答案:

答案 0 :(得分: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;
}