SpringMVC Request method 'GET' not supported

Рейтинг: 1Ответов: 2Опубликовано: 26.03.2015

Начал изучать springMVC и пытаюсь сделать RESTful веб-приложение.

На страницу с БД выводится список книг, и по клику они должны удаляться.
Пытаюсь сделать через method = RequestMethod.DELETE - получаю ошибку:

HTTP Status 405 - Request method 'GET' not supported код контролера

@Controller
public class BookController {

private BookRepository bookRepository;

private BookValidator bookValidator;

@Autowired
public BookController(BookRepository bookRepository, BookValidator bookValidator) {
    this.bookRepository = bookRepository;
    this.bookValidator = bookValidator;
}

@RequestMapping(value = "/", method = RequestMethod.GET)
public String getBooks(Model model) {
    List<Book> books = this.bookRepository.ListAll();

    model.addAttribute("books", books);

    return "index";
}

@RequestMapping(value = "deleteBook/{id}", method = RequestMethod.DELETE)
public  String deleteBook(@PathVariable("id") int id) {
    this.bookRepository.removeBook(id);

    return "redirect:/";

}

index.jsp

<td>< a href="/deleteBook/${book.id}">delete</a></td>

В чем проблема, никак не могу понять, при том что если передавать method = RequestMethod.GET, а не DELETE, как я хочу, то все работает, а с DELETE нет.

Ответы

▲ 2Принят

Конечно, это не работает. Вам нужно использовать в форме метод POST и добавить еще один параметр _method со значением DELETE. А в web.xml добавить фильтр HiddenHttpMethodFilter, который бы ваш POST преобразовывал в DELETE.

См. также вопрос на StackOverflow.

▲ 1

А по-твоему, каким методом ты отправляешь запрос здеся? Я вижу, что это отправляет GET:

<td>< a href="/deleteBook/${book.id}">delete</a></td>

Даже если бы ты пытался отправить PUT/DELETE из HTML формы, html не поддерживает PUT, DELETE их из формы.

link1 link2