После обновления с Spring Boot 2.1.6.RELEASE до 2.2.0.RELEASE мои страницы на основе Thymeleaf перестают работать при выполнении операций установки и удаления во встроенном Tomcat. Получения и публикации работают нормально.
Я вижу в инструментах разработчика Chrome, что отправляется следующий запрос:
URL запроса: https://localhost:8443/notifications/1 Метод запроса: POST
Тело запроса содержит как _method = "put", так и токен _csrf.
Интересно, что мои интеграционные тесты, аннотированные @SpringBootTest, проходят.
Spring Boot Actuator показывает / уведомляет / {NotificationId} сопоставлен с PUT.
Переключение обратно на 2.1.6.RELEASE решает проблему.
Моя форма Thymeleaf определяется следующим образом:
<form id="notificationForm" th:action="@{/notifications/{notificationId}(notificationId=${notification.id})}" th:object="${notification}" th:method="put" class="needs-validation" novalidate autocomplete="off">
Мой метод контроллерааннотируется следующим образом:
@PutMapping("/notifications/{notificationId}")
public String updateNotification(@PathVariable("notificationId") final Long notificationId,
@Valid @ModelAttribute(name = NOTIFICATION_MODEL_ATTRIBUTE) final NotificationDto notificationDto,
final BindingResult result, final Model model, final RedirectAttributes attributes)
Когда я выполняю удаление, в консоли отображается следующая трассировка стека:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:201)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:449)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:67)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:393)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
...
It's as though Spring is not performing the necessary method conversion using _method before resolving the mapping.
Does anyone have any ideas?