Pau*_*aul 1 rest jquery spring web-services put
我想用JQuery调用Spring REST WebService.
我的控制器中有两种方法:
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public @ResponseBody User getUser(@PathVariable long id, Model model){
return new User("TestUser");
}
@RequestMapping(value="/{id}", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateUser(@PathVariable long id, @Valid User user){
user.getName();
}
Run Code Online (Sandbox Code Playgroud)
User类看起来像这样:
public class User {
private String name;
public User(){};
public User(String name){this.name = name;}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
};
Run Code Online (Sandbox Code Playgroud)
}
现在,当我调用http://localhost:8080/demo/user/2结果时,{"name":"TestUser"}就像预期的那样.
但是在尝试修改资源时,我尝试这样做:
$.ajax({
url: "http://localhost:8080/demo/user/2",
dataType: "json",
data: '{"name":"NewTestUser"}',
type: "PUT",
success: function(){alert('success');}
});
Run Code Online (Sandbox Code Playgroud)
我可以在Debugmode中看到调用了正确的方法(updateUser),但User对象的实例变量名始终为null.谁能告诉我我做错了什么?谢谢!
您还必须使用注释User参数@RequestBody,这将触发使用Spring MVC注册的httpmessageconverters将http主体转换为您的User类型,这样:
@RequestMapping(value="/{id}", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateUser(@PathVariable long id, @RequestBody @Valid User user){
user.getName();
}
Run Code Online (Sandbox Code Playgroud)