1

JQuery で Spring REST WebService を呼び出したい。

コントローラーには 2 つのメソッドがあります。

@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();
}

クラス 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;
};

}

今私が呼び出すと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');}
});

適切なメソッド (updateUser) が呼び出されていることを Debugmode で確認できますが、User オブジェクトのインスタンス変数名は常に null です。誰が私が間違っているのか教えてもらえますか? ありがとう!

4

1 に答える 1

5

また、Userパラメーターにを注釈として付ける必要があります@RequestBody。これにより、Spring MVCに登録されているhttpmessageconvertersがトリガーされ、http本文がユーザータイプに変換されます。

@RequestMapping(value="/{id}", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateUser(@PathVariable long id, @RequestBody @Valid User user){
    user.getName();
}
于 2012-10-02T14:56:49.577 に答える