Java 删除控制器不工作
我正在开始为我的小型应用程序设计控制器,目前我有以下几点:Java 删除控制器不工作,java,spring-mvc,jtwig,Java,Spring Mvc,Jtwig,我正在开始为我的小型应用程序设计控制器,目前我有以下几点: @RequestMapping("/users/{id}") public ModelAndView showMemeber(@PathVariable Integer id) { ModelAndView mav = new ModelAndView("user/show"); mav.addObject("title", "Show User"); mav.addObject("user", userSe
@RequestMapping("/users/{id}")
public ModelAndView showMemeber(@PathVariable Integer id) {
ModelAndView mav = new ModelAndView("user/show");
mav.addObject("title", "Show User");
mav.addObject("user", userService.findById(id));
return mav;
}
@RequestMapping(value="/users/{id}", method=RequestMethod.DELETE)
public String deleteMemeber(@PathVariable Integer id) {
userService.delete(id);
return "redirect:users";
}
第一个控制器工作正常,但第二个不正常,我对第一个控制器有以下视图:
<div class="panel-heading">Personal information</div>
<div class="panel-body">
<form method="post">
...
<button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-pencil"></span> Edit</button>
<button type="submit" class="btn btn-danger" onclick="return confirm('Are you sure you want to delete {{ user.username }}?')"><span class="glyphicon glyphicon-remove"></span> Delete</button>
</form>
</div>
个人信息
...
编辑
删除
如您所见,我在这里有两个按钮,一个用于编辑对象,另一个用于删除对象。
一旦删除,必须重定向到https:///users
问题是,当我单击Delete
时,它只是刷新页面,而对象仍保留在数据库中,这里出了什么问题
- 我尝试发送一个
请求,比如DELETE
但这不起作用curl-X“DELETE”http://localhost:8080/my-app/users/18
@RequestMapping(value="/users/{id}", method=RequestMethod.DELETE)
public String deleteMemeber(@PathVariable Integer id) {...}
默认情况下,浏览器不支持此操作-浏览器仅支持POST和GET。为了从浏览器发送删除请求,必须使用JavaScript
一种选择是使用例如
测试删除请求的一种方法是使用命令cUrl:
curl -X DELETE "http://myhost:port/users/someUserId"
正如其他人提到的,您实际上并没有发送HTTP删除请求。删除按钮是表单post的一部分,因此当您提交表单时,它实际上会发送HTTP post请求。 其他人已经演示了一些调用DELETE(Ajax和CURL)的方法,但是我发现最简单的方法是在你最喜欢的浏览器上安装一个插件。
如果您使用的是Chrome浏览器,您可以尝试高级Rest客户端扩展等功能。正如其他人所说,您的html表单将发送帖子,因为这是您的操作。 如果您想保留按钮并在不使用javascript的情况下执行删除(AJAX调用) 然后,您应该尝试在java端更改url模式,并将删除按钮html放在单独的表单中
@RequestMapping(value=“/users/delete/{id}”,method=RequestMethod.POST)当您单击删除按钮时,您的请求是什么样子的?你真的发送删除请求以获得一个正确的URL吗?什么都没有发生,任何更改。这不是我要问的。运行firebug或任何其他工具,点击按钮后查看您发送的请求以及URL。我很确定您没有发送删除请求以获取适当的资源。请求URL:请求方法:帖子状态代码:200首先-使用HTML表单时,您是在发送帖子,而不是删除。放弃它,使用curl执行测试。调用curl(就像在您的示例中,只需添加-v标志以强制使用详细模式)并告诉我们curl返回了什么,将
method=RequestMethod.DELETE
更改为method=RequestMethod.POST
,它就会工作。@JoãoMelo-这是真的,但OP有多个按钮,编辑按钮已经使用了POST。@wassgren当我测试该请求时,返回给我无法解析主机“DELETE”
@Vercryger-您能在这里提供curl命令吗?请注意curl
命令行选项区分大小写,并且-X
和-X
执行完全不同的操作。由于-x
用于指定HTTP代理,我怀疑您使用了该代理而不是-x
,从而导致无法解析主机…
消息。
curl -X DELETE "http://myhost:port/users/someUserId"