Как повесить метод delete на кнопку в Thymeleaf

Есть контроллер

package ru.hiik.documentsite.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import ru.hiik.documentsite.dao.DocumentRepo;
import ru.hiik.documentsite.models.Document;

@Controller
@RequestMapping("documents")
public class DocumentController {

    @Autowired
    DocumentRepo documentRepo;

    @GetMapping
    public String getAllDocuments(Model model){
        model.addAttribute("documents", documentRepo.findAll());
        return "document-page";
    }

    @RequestMapping("/create")
    public String createDocuments(Model model){
        model.addAttribute("document", new Document());
        return "create";
    }

    @PostMapping("/create/submit")
    public String submitDocument(@ModelAttribute Document document){
        documentRepo.save(document);
        return "redirect:../";
    }

    @DeleteMapping("/delete")
    public void deleteDocument(@RequestBody Document document){
        documentRepo.delete(document);
    }
}

Есть шаблон Thymeleaf

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Welcome to DocServer</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
          integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="/css/styles.css">
</head>
<body>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo03"
            aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarTogglerDemo03">
        <ul class="navbar-nav mr-auto mt-2 mt-lg-0">
            <li class="nav-item active">
                <a class="nav-link" href="/documents/create">Создать документ<span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item active">
                <a class="nav-link" href="/documents">Список документации</a>
            </li>
        </ul>
        <form class="form-inline my-2 my-lg-0">
            <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
            <button class="btn btn-outline-info my-2 my-sm-0" type="submit">Search</button>
        </form>
    </div>
</nav>


    <div class="main">
        <div th:each="document:${documents}">
            <div class="card">
                <div class="card-body">
                    <h5 class="card-title" th:text="${document.title}"/>
                    <p class="card-text" th:text="${document.body}"/>
                    <button type="submit">Удалить</button>
                </div>
            </div>
        </div>
    </div>

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
        integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
        integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
        crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"
        integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
        crossorigin="anonymous"></script>
</body>
</html>

Подскажите, как правильно повесить метод delete на кнопку "Удалить"?


Ответы (1 шт):

Автор решения: dmtr

Используйте отправку данных через форму и метод POST

<div class="main">
    <div th:each="document:${documents}">
        <div class="card">
            <div class="card-body">
                <form action="/documents/delete" method="post">
                    <h5 class="card-title" th:text="${document.title}"/>
                    <p class="card-text" th:text="${document.body}"/>
                    <input type="hidden" value="${document}">
                    <button type="submit">Удалить</button>
                </form>
            </div>
        </div>
    </div>
</div>
→ Ссылка