如何在Spring MVC继承中使用@RequestBody注释



首先,查看以下代码

public interface DemoInterface {
@RequestMapping(value = "/test", method = RequestMethod.GET)
String test(@RequestParam String message);
}

然后我让一个类用注释实现这个接口

@Controller
public class DemoClass implements DemoInterface{
@Override
public String test(String message) {
/** TODO something useing the message **/
}
}

这没问题,我可以通过http://ip:port/test?message=something.

但是当我需要传递一个类而不是字符串时:

public interface DemoInterface {
@RequestMapping(value = "/test", method = RequestMethod.POST,  consumes = "application/json")
String test(@RequestBody User user);
}
public class User{
private String name;
/** some other fileds、 geters and seters **/
}
@Controller
publci class DemoClass implements DemoInterface{
@Override
public String test(User user) {
/** TODO something useing the user's fileds **/
}
}

此时,尽管我可以访问http://ip:port/test,当我在Google Chrome浏览器的Restlet Client中将请求体设置为json时,我无法在测试方法中获得用户值,名称总是空的。我的json是这样的:

{"name":"Vincent Kang"}

这是因为我无法在继承的方法中获得形式参数的注释吗?因为我发现,即使在后一种情况下,使用http://ip:port/test?name=Kanghouchao,我仍然可以在测试方法中获得名称,RequestBody似乎无效。

可能我应该在子类的字段中添加@RequestBody

@Controller
publci class DemoClass implements DemoInterface{
@Override
public String test(@RequestBody User user) {
/** TODO something useing the user's fileds **/
}
} 

现在没问题