删除请求的控制器不起作用

时间:2015-02-08 20:58:53

标签: 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", 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>

    ...

    <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://<my domain>/users

问题是,当我点击Delete它只是刷新页面并且对象在数据库上存在时,这里有什么问题?

  • 我尝试发送DELETE curl -X "DELETE" http://localhost:8080/my-app/users/18请求,但这不起作用。
  • 我使用jQuery's ajax-method尝试了另一种替代方法(但同样的错误仍然存​​在):

    $.ajax({
        url: '/users/' + someUserId,
        type: 'DELETE',
        success: function(result) {
            // Do something with the result
        }
    });
    

1 个答案:

答案 0 :(得分:1)

您必须使用ajax从网页发送DELETE。表单标记本身仅支持POST或GET。在您的submit-Handler中,您必须禁止提交按钮的默认行为,即通过GET或POST(event.preventDefault())提交表单:

$("form").submit(function (event) {
        event.preventDefault();

        $.ajax({
                url: '/users/' + someUserId,
                type: 'DELETE',
                success: function(result) {
                        // Do something with the result
                }
        });
}