如何摆脱<mvc:annotation-driven />?

Ta *_*Sas 15 java spring servlets spring-mvc

到目前为止,<mvc:annotation-driven />给我带来了很多麻烦,所以我想摆脱它.尽管spring框架文档清楚地说明它应该做什么,但实际上summar的标签列表<mvc:annotation-driven /> 却缺乏.

所以我坚持删除<mvc:annotation-driven />,现在得到错误

WARN osweb.servlet.PageNotFound - 在名为'workoutsensor'的DispatcherServlet中找不到具有URI [/ webapp/trainees]的HTTP请求的映射

对于所有应该由控制器类解决的Url(在这种情况下:) ./trainees.有什么建议,我可以阅读更多关于<mvc:annotation-driven />?我非常想知道究竟是什么标签代表<mvc:annotation-driven />.

Boz*_*zho 26

您可以使用BeanPostProcessor自定义每个定义的bean <mvc:annotation-driven />.javadoc现在详细说明了标签注册的所有bean.

如果你真的想摆脱它,你可以查看源代码 org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser

你可以看到它定义了哪些bean.我做过这个'练习'(不是针对所有人,而是针对我需要的人),所以这里是:

<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">
Run Code Online (Sandbox Code Playgroud)

现在,上面你看到了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);
    }

}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这对我来说很好.随意报告任何问题.


ear*_*las 5

如果你想避免mvc:annotation-driven标记,你可以自己简单地创建DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter编写bean,但听起来似乎最好用标记本身找到问题的根源.

你的问题有什么症状?您正在尝试使用Spring MVC应用程序做什么?

如果您想知道使用mvc:annotation-driven时幕后发生了什么,请参阅方法.AnnotationDrivenBeanDefinitionParser.parse()