我正在尝试创建一个简单的服务器/客户端应用程序,它可以将bean作为参数而不是String发送,但是下面的失败是我的代码
服务器
@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() );
对于服务器端的对象问候,结果始终为null。
任何想法?
答案 0 :(得分:0)
您没有正确使用RestTemplate
。为什么要传递MultiValueMap
作为要发送的实体?这不会按照服务器期望的方式进行序列化。
直接使用Greeting
对象。
restTemplate.postForObject("http://localhost:8080/returnGreet", new Greeting(0, "XOXO"), Greeting.class);
此外,最后一个参数不是必需的,您没有任何URI变量。