Как избавиться от <mvc: annotation-driven />? - PullRequest
15 голосов
/ 12 сентября 2010

До сих пор <mvc:annotation-driven /> доставлял мне массу неприятностей, поэтому я бы хотел избавиться от этого.Хотя весенние документы по фреймворку ясно говорят, что он должен делать , список тегов, на самом деле summar <mvc:annotation-driven /> отсутствует.

Так что я застрял с удалением <mvc:annotation-driven /> итеперь получаю ошибку

WARN osweb.servlet.PageNotFound - Не найдено сопоставление для HTTP-запроса с URI [/ webapp / trainees] в DispatcherServlet с именем 'workoutsensor'

для всех URL-адресов, которые должны быть разрешены классами контроллеров (в данном случае: ./trainees).Любое предложение, где я могу прочитать больше о <mvc:annotation-driven />?Я отчаянно хотел бы знать, какие именно теги представлены <mvc:annotation-driven />.

Ответы [ 4 ]

26 голосов
/ 12 сентября 2010

Вы можете использовать BeanPostProcessor для настройки каждого компонента, определенного <mvc:annotation-driven />.Javadocs теперь детализирует все бины, которые регистрирует тег.

Если вы действительно хотите избавиться от него, вы можете посмотреть исходный код org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser

ИВы можете видеть, какие бобы это определяет.Я выполнил это «упражнение» (не для всех, но для тех, кто мне нужен), поэтому вот они:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="com.yourpackage.web.util.CommonWebBindingInitializer" />
        </property>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
                <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" />
                <bean class="org.springframework.http.converter.StringHttpMessageConverter" />
                <bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter" />
                <bean class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter" />
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
                <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" />
                <!-- bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /-->
            </list>
        </property>
    </bean>
<bean id="handlerMapping"
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

Теперь, над вами, вы видите CommonWebBindingInitializer.Вы должны создать этот класс, чтобы использовать преобразование и проверку:

public class CommonWebBindingInitializer implements WebBindingInitializer {

    @Autowired
    private Validator validator;

    @Autowired
    private ConversionService conversionService;

    @Override
    public void initBinder(WebDataBinder binder, WebRequest request) {
        binder.setValidator(validator);
        binder.setConversionService(conversionService);
    }

}

И до сих пор это прекрасно работает для меня.Не стесняйтесь сообщать о любых проблемах с ним.

5 голосов
/ 12 сентября 2010

Если вы хотите избежать тега mvc:annotation-driven, вы можете просто создать бины DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter самостоятельно, но, похоже, было бы лучше добраться до корня ваших проблем с помощью самого тега.

Каковы симптомы вашей проблемы? Что вы пытаетесь сделать с приложением Spring MVC?

Если вы хотите знать, что происходит под покровом, когда вы используете mvc: на основе аннотаций, см. Метод AnnotationDrivenBeanDefinitionParser.parse().

3 голосов
/ 09 февраля 2012

Старый вопрос, я знаю, но это может кому-то помочь.Благодаря публикациям на этой странице, а также здесь я использовал следующее для замены тега, управляемого аннотациями, в приложении Roo 1.2.Для меня они нуждались в поддержке преобразования типов в представлении списка приложений roo.

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

<bean id="conversionServiceExposingInterceptor"
    class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor">
    <constructor-arg ref="conversionService" />
</bean>

<bean
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="order" value="0" />
    <property name="interceptors">
        <list>
            <ref bean="conversionServiceExposingInterceptor" />
        </list>
    </property>
</bean>

<bean
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService" />
            <property name="validator" ref="validator" />
        </bean>
    </property>
    <property name="messageConverters">
        <list>
            <bean
                class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
            <bean
                class="org.springframework.http.converter.StringHttpMessageConverter" />
            <bean class="org.springframework.http.converter.FormHttpMessageConverter" />
            <bean
                class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
        </list>
    </property>
</bean>
2 голосов
/ 23 декабря 2013

При переопределении будьте внимательны, если учесть также переопределение управления выполнением. В противном случае все ваши пользовательские сопоставления исключений потерпят неудачу. Вам придется повторно использовать MessageCoverters с bean-компонентом списка:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

<util:list id="messageConverters">
    <bean class="your.custom.message.converter.IfAny"></bean>
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</util:list>

<bean name="exceptionHandlerExceptionResolver"
      class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
    <property name="order" value="0"/>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean name="handlerAdapter"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService" />
            <property name="validator" ref="validator" />
        </bean>
    </property>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...