我一直在为<interceptors>
寻找基于注释的方法,然后找到here的方式
所以我用它和它的工作,但有一个问题。
当我这样做时;
@Configuration
@EnableWebMvc
public class WebApplicationConfig extends WebMvcConfigurerAdapter{
....
}
并且servlet-context.xml中没有<annotation-driven />
标记然后它完全正常并且url被截获并且corressponding pre-post逻辑工作在“WebApplicationConfig” - 我的自定义拦截器中实现。
但是,如果我删除@EnableWebMvc
并添加<annotation-driven />
,那么从逻辑上说应用程序不起作用,这意味着没有截获任何网址,就像“WebApplicationConfig”类甚至不存在一样。
@EnableWebMvc
和<annotation-driven />
,那么并关闭cource,然后在部署应用程序时出现异常。 :
ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed
..........
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.springframework.web.servlet.HandlerExceptionResolver
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.handlerExceptionResolver()] threw exception;
nested exception is java.lang.ClassCastException:
org.springframework.web.accept.ContentNegotiationManagerFactoryBean$$EnhancerByCGLIB$$56a95502 cannot be cast to org.springframework.web.accept.ContentNegotiationManager
当我使用<annotation-driven />
代替@EnableWebMvc
如果我选择@EnableWebMvc
而不是<annotation-driven />
,那么在声明类WebApplicationConfig的地方使用@EnableWebMvc
是对的吗?
答案 0 :(得分:3)
虽然@EnableWebMvc
和<mvc:annotation-driven />
具有相同的目的,但可以使用@Controller
支持@RequestMapping
。它们不是使用基于Java的配置或xml的补充,混合它们将不起作用。
WebMvcConfigurerAdapter
或实际WebMvcConfigurer
仅在使用@EnableWebMvc
时设计和检测到,而不是在使用<mvc:annotation-driven />
时。
尝试启用/使用它们时,您将遇到重复注册的comopnents(如RequestMappingHandlerAdapter
等)的问题。
答案 1 :(得分:0)
@EnableWebMvc
和<mvc:annotation-driven/>
与激活@controller
等相同。
你确定在加载时加载了xml和config文件吗?
也许在您的xml文件中,控制器基础包的地址是错误的或类似的东西。尝试将控制器类添加为bean并查看它是否正常工作