Delete methods, Spring

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

Изучаю Spring 5, пишу CRUD приложение (Spring Boot 2.7 + Spring Data Jpa).При попытке удалить сущность браузер выдает "There was an unexpected error (type=Method Not Allowed, status=405)". Из бд ничего не удаляется. Фильтр скрытых методов включен. GET и POST запросы отрабатывают отлично. DELETE - нет.

spring.mvc.hiddenmethod.filter.enabled=true

Если выключить фильт скрытых методов, то в терминале не будет сообщения "метод POST не поддерживается". При отправке http запроса с методом DELETE в Intellij Idea все работает как надо

Строка с кнопкой удаления:

<form th:method="DELETE" th:action="@{/people/{id}(id=${person.getId()})}">
    <input type="submit" value="Удалить"/>
</form>

Контроллер:

@Controller
@RequestMapping("/people")
public class PeopleController {

private final PeopleService peopleService;

@Autowired
public PeopleController(PeopleService peopleService) {
    this.peopleService = peopleService;
}

@GetMapping()
public String index(Model model){
    model.addAttribute("people", peopleService.index());
    return "people/people";
}

@GetMapping("/new")
public String newPerson(Model model){
    model.addAttribute("person", new Person());
    return "people/new";
}

@GetMapping("/{id}")
public String show(@PathVariable("id") int id, Model model){
    model.addAttribute("person", peopleService.findOne(id));
    return "people/show";
}

@PostMapping()
public String create(@ModelAttribute Person person){
    peopleService.save(person);
    return "redirect:/people";
}


@DeleteMapping("/{id}")
public String delete(@PathVariable("id") int id){
    peopleService.delete(id);
    return "redirect:/people";
}

}

Ответы

▲ 0

Вопрос снят. Моя ошибка была в том, что я запускал приложение на Netty о котором вообще узнал только в ходе решения данной проблемы. Надо запускать на Tomcat.

Было:

    <dependency>
        <groupId> org.springframework.boot </groupId>
        <artifactId> spring-boot-starter-webflux </artifactId>
    </dependency>

Стало:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>