使用jQuery调用Spring REST Web Service

时间:2012-10-02 14:13:10

标签: jquery web-services spring rest 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();
}

用户类看起来像这样:

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;
};

}

现在,当我致电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');}
});

我可以在Debugmode中看到调用了正确的方法(updateUser),但User对象的实例变量名始终为null。谁能告诉我我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:5)

您还必须使用@RequestBody注释User参数,这将触发使用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();
}