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


弑天下
浏览 277回答 1
1回答

江户川乱折腾

可能我应该在我的子类的字段中添加 @RequestBody@Controllerpublci class DemoClass implements DemoInterface{    @Override    public String test(@RequestBody User user) {        /** TODO something useing the user's fileds **/    }} 现在好了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java