2012-08-30 154 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"

相关问题