Spring Boot 2.2.0.RELEASE не отображает запросы на установку и удаление тимелина - PullRequest
0 голосов
/ 25 октября 2019

После обновления с 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?

1 Ответ

0 голосов
/ 27 октября 2019

Как будто Spring не выполняет преобразование необходимого метода с помощью _method до разрешения сопоставления.

Это именно то, что происходит. Это преобразование выполняется HiddenHttpMethodFilter, и оно отключено по умолчанию в Spring Boot 2.2 :

Фильтр, который обрабатывает параметр запроса _method, теперь отключен по умолчаниютак как это вызывает раннее потребление тела запроса, если тело может содержать параметры. Это можно восстановить, установив для spring.webflux.hiddenmethod.filter.enabled или spring.mvc.hiddenmethod.filter.enabled значение true.

Вы используете Spring MVC, поэтому вам следует установить spring.mvc.hiddenmethod.filter.enabled=true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...