Spring 4.3.3 — Метод POST ParameterizableViewController больше не поддерживается

#java #spring #spring-mvc

#java #весна #spring-mvc

Вопрос:

После обновления до Spring 4.3.3.RELEASE я получаю сообщение об ошибке:

Метод запроса ‘POST’ не поддерживается

Мое приложение является базовым шаблоном, и домашний вид отображается через

 <mvc:view-controller path="/" view-name="home.view"/>
 

Он отлично работает на Spring 4.2.8.

Любой намек на решение проблемы?

Ответ №1:

Мы столкнулись с той же проблемой. Оказывается, в какой-то момент ParameterizableViewController был изменен, чтобы поддерживать только запросы GET и HEAD.

Мы решили эту проблему, заменив определение чем-то вроде этого:

 <bean id="homeController" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    <property name="supportedMethods" value="GET,POST,PUT,DELETE" />
    <property name="viewName" value="home.view" />
</bean>

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <map>
            <entry key="/" value-ref="homeController"/>
        </map>
    </property>
</bean>
 

По сути, это позволяет вам создавать ParameterizableViewController с любыми поддерживаемыми HTTP-методами, которые вы пожелаете. Второй компонент создает сопоставление так, чтобы путь «/» разрешался для определенного контроллера.

Комментарии:

1. Это кажется хорошим решением. Это работает нормально и позволяет избежать реализации классов контроллеров для простых представлений.

2. Спасибо! Ты спас мне жизнь. Мы обновились некоторое время назад, и никто не заметил, что это изменилось.

Ответ №2:

Поддерживаемые по умолчанию методы ParameterizableViewController — GET, HEAD мы проверяем это с помощью следующего фрагмента кода.

 ParameterizableViewController pvc=new ParameterizableViewController();
            String[] str=pvc.getSupportedMethods();
            for(String x:str) {
                System.out.println(x);
            }
 

чтобы добавить POST или любой другой HTTP-метод, нам нужно добавить этот XML-тег в наш bean-тег.

 <bean id="testUrl"
        class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <property name="supportedMethods" value="GET,POST,PUT,DELETE" />
        <property name="viewName" value="success" />
</bean>