2015-01-16 64 views
0

這裏是一些控制器:需要大約休息PUT方法解釋

@RequestMapping(value="/rest/put/{login}", method = RequestMethod.PUT) 
    public @ResponseBody User putUser(@RequestBody User user, @PathVariable String login){ 
     return user; 
    } 

當我申請

{"login":"ale"} 

發送到這個網址

http://localhost:8080/Application/rest/put/termination 

我收到這樣的正常反應:

{"login":"ale","password":"password","email":"email"} 

我的問題:爲什麼在控制器必須是@PathVariable登錄(至少它是在所有的教程),而不是隻是靜態的URL,這是什麼原因呢?

+0

我明白,把必須使用只有現有的映射,只爲更新實體? – alemale

回答

1

首先,你的問題不太準確。它不是必須包括@PathVariable裏面的控制器方法。您可以隨時使用靜態URL。

其次,它不是一個必須@PathVariable的休息,但一標準。該標準試圖將通用的CRUD操作映射到普通HTTP動詞(POST,GET,PUT,DELETE),並且該URL通常會包含資源名稱和資源ID。通常,@PathVariable表示REST標準URL中的資源ID。

此類URL的示例應爲/user/{user_id},其中user是資源名稱,user_id將是資源ID。

因此,最後,通過查看您發佈的代碼。 @PathVariable String login並沒有真正符合REST標準。如您的示例URL,

http://localhost:8080/Application/rest/put/termination 

這意味着login = termination,這顯然與REST沒有任何關係。

+0

有用的答案,但如果我的用戶沒有ID字段,並沒有在數據庫中的ID列呢? – alemale

+0

然後REST不符合你的目的。 –