Есть на странице лист объектов, хочу добавить кнопку удалить. Нахожу объект по айди(хотя вопрос зачем, я же кнопку жму по тому объекту, который имеет уже айдишник).
@DeleteMapping("/notes/{id}")
public String deleteNote(@PathVariable Long id, Model model
) {
Note note = noteRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid note Id" + id));
noteRepository.delete(note);
model.addAttribute("noteDelete", note);
return "notes";
}
notes.ftl:
<#list notes as note>
<p>${note.id}. Title:${note.title} Read<a href="/notes/${note.id}">more</a></p>
<form action="/notes/${noteDelete.id}">
<input type="submit" value="Delete">
</form>
<#else>
<p>Notes not found</p>
</#list>
Как правильно тут удалить? В чем ошибка
@DeleteMapping принимает запросы с методом DELETE. Не указывая атрибута method в теге form, по умолчанию методом запроса будет GET. НО, в атрибуте method можно указать только GET и POST. Это означает, что данный запрос нужно отправлять с помощью JavaScript (XMLHttpRequest или Fetch API).
@PostMapping("/notes/{id}")
public String deleteNote(@PathVariable("id") Long id, Model model
) {
Note note = noteRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid note Id" + id));
noteRepository.delete(note);
model.addAttribute("noteDelete", note);
return "redirect:/notes";
}
notes.ftl:
<#list notes as note>
<p>${note.id}. Title:${note.title} Read<a href="/notes/${note.id}">more</a></p>
<form action="/notes/${noteDelete.id}" method="post">
<input type="submit" value="Delete">
<input type="hidden" name="_csrf" value="${_csrf.token}"/>
</form>
<#else>
<p>Notes not found</p>
</#list>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты