如何摆脱<mvc:注释驱动的/>?

2022-09-03 09:31:52

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

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

WARN o.s.web.servlet.PageNotFound - 在 DispatcherServlet 中找不到带有 URI [/webapp/trainees] 的 HTTP 请求的映射,名称为“workoutsensor”

对于应该由控制器类解析的所有 Url(在本例中为:)。任何建议,我可以阅读更多关于?我非常想知道究竟用 ../trainees<mvc:annotation-driven /><mvc:annotation-driven />


答案 1

可用于自定义 由 定义的每个 Bean。Javadocs 现在详细说明了标记寄存器的所有 bean。BeanPostProcessor<mvc:annotation-driven />

如果你真的想摆脱它,你可以看看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);
    }

}

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


答案 2

如果你想避免标签,你可以简单地自己创建和豆子,但听起来最好通过标签本身找到麻烦的根源。mvc:annotation-drivenDefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter

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

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


推荐