2012-08-30 165 views
0

我想實現從列表視圖中刪除實體。我面臨這個問題。你能解釋我嗎,有什麼問題,我該怎麼去支持它?如何處理錯誤「請求方法」GET'不支持「

控制器方法:

@RequestMapping(value = "/deleteComment/{commentId}", method = RequestMethod.POST) 
public String deleteComment(@PathVariable int commentId, BindingResult result, Model model){ 
{ 
    Comment deletedComment = commentService.findCommentByID(commentId); 
    if (deletedComment != null) { 
     commentService.deleteComment(deletedComment); 
    } 

    return "refresh:"; 
} 

我需要指定「獲取」的方法,如果我跟列表視圖處理(我看到整個列表)。如果我需要,我應該在那裏放置哪些代碼。我沒有任何想法...

回答

1

通過指定method = RequestMethod.POST你基本上是說,deleteComment方法應該只爲POST和路徑/deleteComment/{commentId}被調用。如果你想讓它接受GET請求也,你可以刪除方法或接受也到了這種地步:

@RequestMapping(value = "/deleteComment/{commentId}", method = {RequestMethod.POST, RequestMethod.GET}) 

您可能還需要明確指定變量的名稱綁定到commentId路徑變量這樣:

public String deleteComment(@PathVariable("commentId") int commentId, BindingResult result, Model model){ 
+0

雖然,請注意GET不應該有副作用。重複獲取URI對服務器沒有任何影響應該是安全的。先發制人地獲取東西應該是安全的,因爲用戶稍後可能想要獲取它,並且返回的實體已經存在於高速緩存中,依此類推。 –

+0

但是,爲什麼我需要'Get'方法?我從我的列表中獲得所有信息,我想從此列表中刪除一個項目。我可以完成所有的項目,所以'GET'部分應該已經執行....或者我很可怕嗎? – Eugene

+1

您可以通過指定該方法是否響應GET,POST,PUT等,將相同的URL映射到控制器中的多個方法。您的代碼告訴Spring只在使用POST接收URL時觸發該方法。 – nickdos

2

問題是在按鈕類型屬性。

如果您有HTML按鈕type="submit"那麼您的服務只能是RequestMethod.GET。當您更改爲RequestMethod.POST時,則您有「請求方法」GET'不支持「。

SOLUTION:將按鈕標籤中的屬性更改爲type="button"

相關問題