[JAVA] Behandeln Sie die HTTP PUT / DELETE-Methode mit SpringBoot2.2 + Thymeleaf

Spring MVC Controller kann PUT / DELETE als HTTP-Methode verarbeiten, HTML5 kann diese HTTP-Methoden jedoch weiterhin nicht verarbeiten. Bisher, um diese Lücke zu füllen

Controller.java


@Controller
@RequestMapping("/item")
public class ItemController {
    ...
    @DeleteMapping("{id}")
    public String delete(@PathVariable("id") Long id) {
        service.delete(id);
        return "redirect:/item";
    }
}

template.html


<form th:action="@{/item/{id}(id=*{id})}" th:method="delete">
    <input type="submit" value="delete" />
</form>

rendered.html


<form action="/item/1" method="post">
    <input type="hidden" name="_method" value="delete" />
    <input type="submit" value="delete" />
</form>

--Wenn dieser versteckte Parameter von einem Filter namens HiddenHttpMethodFilter erkannt wird, wird die Anforderungsmethode ersetzt.

Ich habe den Ansatz gewählt.

Bis SpringBoot 2.1 war dieser HiddenHttpMethodFilter in der Standard-AutoConfiguration aktiviert, sodass er ohne vorherige Ankündigung verfügbar war. Ab SpringBoot 2.2 hat sich das Standardverhalten jedoch geändert und es scheint deaktiviert zu sein.

Spring Boot 2.2 Release Notes: HttpHiddenMethodFilter disabled by default

Laut Versionshinweis

it causes early consumption of a request body if the body may contain parameters.

Ich konnte also nicht verstehen, was früher Verbrauch bedeutet, aber ich frage mich, ob der Nachteil des Overheads, den Filter für das, was ich tun möchte, zu beißen, größer ist. Es gibt kein Anzeichen dafür, dass HTML PUT / DELETE unterstützt, und es kann sein, dass die PUT / DELETE-Methode nicht von einer HTML-Website erzwungen werden muss, die keine REST-API ist.

Wenn Sie HttpHiddenMethodFilter verwenden möchten, können Sie es in der Konfiguration aktivieren.

application.yml


spring.mvc.hiddenmethod.filter.enabled: true

Sie können jetzt die PUT / DELETE-Methode wie zuvor aus HTML verwenden. Ist es jedoch nicht besser, die Tatsache nicht zu verwenden, dass Spring Boot standardmäßig deaktiviert ist?

Nachtrag

Warum wurde es aus der Standardeinstellung entfernt? Über diesen Punkt. Es wurde um das folgende Problem diskutiert.

https://github.com/spring-projects/spring-boot/issues/16953 https://github.com/spring-projects/spring-boot/issues/18088

Grob zusammengefasst

Das scheint der Grund zu sein. Auf dieser Grundlage scheint es gut, es zu aktivieren, wenn es kein Problem gibt.

Recommended Posts

Behandeln Sie die HTTP PUT / DELETE-Methode mit SpringBoot2.2 + Thymeleaf
Zeichnen Sie den Bildschirm mit Thymeleaf in SpringBoot
Fügen Sie das von http erhaltene Bild in NotificationCompat ein