2012-10-02 82 views
1

我想用JQuery調用Spring REST WebService。用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結果是{ 「名」 :「TestUser」}像預期的那樣。

但是,試圖修改資源我試着像這樣的時候:

$.ajax({ 
    url: "http://localhost:8080/demo/user/2", 
    dataType: "json", 
    data: '{"name":"NewTestUser"}', 
    type: "PUT", 
    success: function(){alert('success');} 
}); 

我可以Debugmode看到合適的方法(UpdateUser兩個)被調用,但用戶對象的實例變量的名字總是空。有人可以告訴我我做錯了什麼嗎?謝謝!

+0

的數據?例如,updateUser()函數應該如何知道它正在處理哪個User對象? – supertopi

回答

5

您還將有註釋與@RequestBody用戶參數,這將觸發與Spring MVC註冊到HTTP主體轉化爲自己的用戶類型的httpmessageconverters,這種方式:

@RequestMapping(value="/{id}", method=RequestMethod.PUT) 
@ResponseStatus(HttpStatus.NO_CONTENT) 
public void updateUser(@PathVariable long id, @RequestBody @Valid User user){ 
    user.getName(); 
} 
哪裏存儲
+1

完全+1,通過這種方式,spring將使用json映射器(jacson-json或其他)將你的響應體映射到用戶對象中 – Elbek

+0

非常感謝,這解決了我的問題。 – Paul