2014-01-22 94 views
0

我想创建一个可以发送一个bean作为参数,而不是字符串的简单的服务器/客户端应用程序,但低于失败是我的代码弹簧4的REST类型的服务与豆

服务器

@Controller 
public class GreetingController { 

private static final String template = "Hello, %s!"; 
private final AtomicLong counter = new AtomicLong(); 

@RequestMapping(method=RequestMethod.POST,value="/returnGreet") 
public @ResponseBody Greeting returnGreet(
     @RequestBody(required=false) Greeting greet) { 
    if(greet == null) 
      return new Greeting(counter.incrementAndGet(), 
        String.format(template, greet)); 
    else 
     return new Greeting(0,"Testing"); 
} 
} 

客户

RestTemplate restTemplate = new RestTemplate(); 

    MultiValueMap<String,Greeting> greet = new LinkedMultiValueMap<String, Greeting>(); 
    greet.add("greet", new Greeting(0,"XOXO")); 



    greeting = restTemplate.postForObject("http://localhost:8080/returnGreet",greet, Greeting.class,greet); 
    System.out.println("Content: " + greeting.getContent()); 
    System.out.println("Id: " + greeting.getId()); 

对于服务器端的对象问候,结果始终为空。

任何想法?

回答

0

您没有正确使用RestTemplate。你为什么通过MultiValueMap作为实体发送?这不会按照您的服务器预期的方式进行序列化。

直接使用Greeting对象。

restTemplate.postForObject("http://localhost:8080/returnGreet", new Greeting(0, "XOXO"), Greeting.class); 

此外,最后一个参数不是必需的,您没有任何URI变量。

+0

我已经这样做了,但我得到错误org.springframework.web.client.HttpClientErrorException:400错误的请求,我不怎么跟踪它。 – Shahbour

+0

@Shahbour将服务器的记录器级别设置为DEBUG,并检查Spring无法反序列化身体的位置。 –

+0

你好,它的工作现在缺少也是类Greeting没有空的构造是必需的,我发现改变日志为TRACE为。大 – Shahbour