2016-03-08 150 views
1

我試圖在Spring MVC中編寫一個簡單的PUT請求方法。我有以下幾點:Spring MVC中的PUT請求

@RequestMapping(value = "https://stackoverflow.com/users/{id}", method = RequestMethod.PUT) 
public @ResponseBody User updateUser(@PathVariable("id") long id, 
            String name, 
            String email) { 
     User user = repository.findOne(id); 
     user.setName(name); 
     user.setEmail(email); 
     System.out.println(user.toString()); 
     repository.save(user); 
     return user; 
} 

這顯然是錯誤的,因爲它返回如下:

User{id=1, name='null', email='null'} 

我也試圖與@RequestBody註釋,但也沒有幫助。任何想法我在這裏做錯了將不勝感激。

回答

5

你沒有告訴春天如何綁定請求中的參數nameemail。例如,通過添加一個@RequestParam

public @ResponseBody User updateUser(@PathVariable("id") long id, 
            @RequestParam String name, 
            @RequestParam String email) { ... } 

nameemail參數將來自該請求中的查詢字符串來填充。舉例來說,如果你開除到/users/1?name=Josh&[email protected]的請求,你會得到這樣的迴應:

User{id=1, name='Josh', email='[email protected]'} 

爲了獲得有關定義處理方法更深入的瞭解,檢查出春天documentation

10

您可以接收nameemail蒙山的@RequestBody註釋:

@RequestMapping(value = "https://stackoverflow.com/users/{id}", method = RequestMethod.PUT) 
public @ResponseBody User updateUser(@PathVariable("id") long id, 
            @RequestBody User user) {} 

這是一個更好的做法,當談到REST應用程序,您的網址變得更加乾淨和休息風格。 您甚至可以在User上添加@Valid註釋並驗證其屬性。

在您的郵遞員客戶端上,您發送User作爲JSON,而不是您的請求的URL。不要忘記,User類應該與發送的JSON對象具有相同的字段。

在這裏看到: enter image description here

+0

我這樣做,它並沒有爲我工作由於某種原因,返回怪異的解析問題,當我在做與郵差查詢。相反,我以'@ RequestPart'結算。 –

+0

@sosek我編輯了我的答案,並增加了你應該怎麼做郵遞員。 – inafalcao