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

时间:2018-10-27 01:48:28

标签: java spring-mvc spring-boot request

首先,请看下面的代码

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似乎无效。

1 个答案:

答案 0 :(得分:0)

也许我应该在子类的字段中添加@RequestBody

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

现在可以了