omj*_*ish 5 json spring-mvc resttemplate
我必须使用postForObject()方法将JSON数据从一种服务方法发送到另一种服务方法.我RestTemplate在这个链接上看到了一个例子.
postForObject() 方法具有以下格式:
User returns = rt.postForObject(uri, u, User.class, vars);
Run Code Online (Sandbox Code Playgroud)
要么
User returns = rt.postForObject(uri, u, User.class);
Run Code Online (Sandbox Code Playgroud)
我想知道,在使用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());
....
Run Code Online (Sandbox Code Playgroud)
我在这一行得到错误:
ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,我收到此错误消息:
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)
Run Code Online (Sandbox Code Playgroud)
我的实现方法是:
@RequestMapping(value = "/launchservices", method = RequestMethod.POST)
@ResponseBody
public boolean launchServices(@PathVariable ServiceRequest request) {
System.out.println("Request: "+request.toString());
return true;
}
Run Code Online (Sandbox Code Playgroud)
如何摆脱这个?什么是URI?
我得到了这个问题的解决方案。
在这个例子中,方法 postForObject 返回一个类“ServiceRequest”的对象
ServiceRequest req = restTemplate.postForObject(uri, request, ServiceRequest.class);
Run Code Online (Sandbox Code Playgroud)
所以,用上面的“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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34298 次 |
| 最近记录: |