[JAVA] Gérer la méthode HTTP PUT / DELETE avec SpringBoot2.2 + Thymeleaf

Spring MVC Controller peut gérer PUT / DELETE en tant que méthode HTTP, mais HTML5 ne peut toujours pas gérer ces méthodes HTTP. Jusqu'ici pour combler cette lacune

Controller.java


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

--Si vous définissez un formulaire pour la méthode put / delete du côté thymeleaf, remplacez-le par post et incorporez un paramètre caché appelé _method.

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>

--Lorsque ce paramètre masqué est détecté par un filtre appelé HiddenHttpMethodFilter, la méthode de requête est remplacée.

J'étais en train d'adopter l'approche.

Jusqu'à SpringBoot 2.1, ce HiddenHttpMethodFilter était activé dans la configuration automatique par défaut, il était donc disponible sans préavis, mais à partir de SpringBoot 2.2, le comportement par défaut a changé et il semble qu'il a été désactivé.

Spring Boot 2.2 Release Notes: HttpHiddenMethodFilter disabled by default

Selon la note de publication

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

Je ne pouvais donc pas comprendre ce que signifiait une consommation précoce, mais je me demande si l'inconvénient de mordre le filtre pour ce que je veux faire est plus grand. Il n'y a aucun signe que HTML prend en charge PUT / DELETE, et il se peut qu'il ne soit pas nécessaire de forcer la méthode PUT / DELETE à partir d'un site Web HTML qui n'est pas une API REST.

Si vous souhaitez utiliser HttpHiddenMethodFilter, vous pouvez l'activer dans Configuration.

application.yml


spring.mvc.hiddenmethod.filter.enabled: true

Vous pouvez maintenant utiliser la méthode PUT / DELETE à partir de HTML comme auparavant. Cependant, n'est-il pas préférable de ne pas utiliser le fait que Spring Boot est désactivé par défaut?

Postscript

Pourquoi a-t-il été supprimé de la valeur par défaut? À propos de ce point. Il a été discuté autour de la question suivante.

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

En gros résumé

Cela semble être la raison. Sur cette base, il semble bon de l'activer lorsqu'il n'y a pas de problème.

Recommended Posts

Gérer la méthode HTTP PUT / DELETE avec SpringBoot2.2 + Thymeleaf
Dessiner un écran avec Thymeleaf dans SpringBoot
Mettez l'image obtenue à partir de http dans NotificationCompat