HTTP Status 405 - Метод запроса «GET» не поддерживается при вызове запроса на удаление - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь реализовать действие удаления для каждой строки с данными, вызывая модальный загрузчик.И затем отправка запроса на удаление в контроллер с параметром имени пользователя.

   $(document).ready(function () {
    $('#usersTable').DataTable({
        "sAjaxSource": "users/list",
        "sAjaxDataProp": "",
        "aoColumns": [
            {"mData": "username"},
            {"mData": "firstName"},
            {"mData": "lastName"},
            {"mData": "status"},
            {"mData": "role.roleName"},
            {
                mRender: function (data, type, row) {

                    var linkDel = "<a href=\"#\" onclick=\"fillDeleteFrm(\'username\')\">Delete</a>";
                    linkDel = linkDel.replace("id", row.id);
                    linkDel = linkDel.replace("name", row.name);
                    return linkDel;
                }
            }
        ]
    })
});

   function fillDeleteFrm(username) {
    $('#delete-username').val(username);
    $('#userDeleteModal').modal('toggle');
    return false;
}

Форма тимелист, которая вызывает контроллер пружины:

        <div id="userDeleteModal">
            <form id="systemUserForm" th:action="@{/userdelete}" th:method="delete">
                    <input type="hidden" id="delete-username" name="username" th:value="*{username}">
                        <button type="submit" class="btn btn-primary">Delete</button>
                    </div>
                </form>

Соответствующий контроллер пружины:

    @ResponseBody
    @RequestMapping(value="/userdelete", method = RequestMethod.DELETE)
    public ModelAndView deleteEmployee(@RequestParam String username) {
    User user = userService.findUserByUserName(username);
    userService.deleteUser(user);
    return new ModelAndView("users");
  }

Даже если я вызываю метод запроса на удаление,отображение не направляет к этому контроллеру, предупреждая

HTTP Status 405 - Request method 'GET' not supported

Что бы я сделал неправильно?Заранее спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

Браузеры не поддерживают DELETE метод в формах.С th:method="delete" Thymleaf добавляет скрытое поле формы _method.

<input type="hidden" name="_method" value="delete">

Если вы добавите фильтр [HiddenHttpMethodFilter][1] в свое приложение, он преобразует запрос на публикацию в запрос на удаление на основе параметра _method.Попробуйте добавить следующее в ваш файл web.xml.

Если вы используете весеннюю загрузку, фильтр автоматически включается.Но в простом весеннем веб-приложении mvc вам придется добавить фильтр вручную в файл web.xml.Этот фильтр, вероятно, отсутствует в вашем приложении.Вот почему запрошенный GET не преобразуется в запрос DELETE.

<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>     
</filter-mapping>
...