Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除控制器不工作_Java_Spring Mvc_Jtwig - Fatal编程技术网

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
    但这不起作用
通过HTTP进行通信时,会出现大量问题。最常见的是GET、PUT、POST和DELETE

在控制器中,您声明希望收到删除请求:

@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"