一尘不染

如何摆脱 ?

spring-mvc

到现在<mvc:annotation-driven />为止,给我造成了很多麻烦,所以我想摆脱它。尽管spring框架文档清楚地说明了应该做的事情,但实际上<mvc:annotation-driven />
并没有摘要列表。

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

WARN osweb.servlet.PageNotFound-在DispatcherServlet中,名称为’workoutsensor’的URI
[/ webapp / trainees]的HTTP请求未找到映射

对于所有应该由控制器类解决的Url(在这种情况下:)./trainees。有什么建议可以让我了解更多信息<mvc:annotation-driven />吗?我非常想知道到底用什么标记<mvc:annotation-driven />


阅读 334

收藏
2020-06-01

共1个答案

一尘不染

您可以用BeanPostProcessor来自定义定义的每个bean <mvc:annotation-driven />。现在,javadocs详细说明了标签注册的所有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">

现在,在上方您会看到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);
    }

}

到目前为止,这对我来说还不错。随时报告任何问题。

2020-06-01