gav*_*koa 6 java junit spring spring-mvc
我执行重构并将控制器拆分为2个控制器:
@RequestMapping(value = "/graph.htm", method = RequestMethod.POST, params="first")
在第一个控制器和:
@RequestMapping(value = "/graph.htm", method = RequestMethod.POST, params="second")
在第二个控制器中,所以这些注释位于不同的文件中.当我构建和使用项目时,一切都很好(我在表单中输入了不同名称的输入 HTML标签:第一个和第二个).
但是当我尝试运行JUnit控制器测试时:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
我得到了痕迹:
Caused by: java.lang.IllegalStateException: Cannot map handler 'firstController'
to URL path [/graph.htm]: There is already handler
of type [class com.web.controller.SecondController] mapped.
at org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(AbstractUrlHandlerMapping.java:294)
at org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.registerHandler(AbstractUrlHandlerMapping.java:266)
at org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.detectHandlers(AbstractDetectingUrlHandlerMapping.java:82)
at org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58)
at org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119)
at org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:72)
at org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73)
at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:117)
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:399)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
当我发表评论时:
@RequestMapping(value = "/graph.htm", method = RequestMethod.POST, params="second")
在第二个控制器单独测试第一个控制器成功完成.
要解决这个问题,我可能会使用不同的URL(值在@RequestMapping),但我不明白为什么请求映射解决的PARAMS在我的应用程序的生产版本和失败,基于SpringJUnit4ClassRunner.
欢迎任何帮助!
PS.我使用Spring 3.2.
PPS.我发现大多数相同的问题我可以在不同的Spring控制器中使用不同的param具有相同的映射值吗?但根据答案,我的生产构建也必须失败?!但是我成功运行了生产!
另请参阅:
*PPS.
我检查3.2的官方文档:
In a Servlet environment, parameter mappings are considered as restrictions that are enforced at the type level. The primary path mapping (i.e. the specified URI value) still has to uniquely identify the target handler, with parameter mappings simply expressing preconditions for invoking the handler.
所以我似乎在进行非法编码练习......
我的邻居同事帮助我解决问题。
我们比较生产环境和测试环境,发现上下文 XML 配置存在差异。
之前失败的测试配置:
<bean名称=“handlerMapping”
类=“org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping”/>
<bean名称=“handlerAdapter”
类=“org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter”/>
新的工作测试上下文配置:
<bean名称=“handlerMapping”
类=“org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping”/>
<bean名称=“handlerAdapter”
类=“org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter”/>
不同的 spring 类使用不同的映射模式。每个类的旧用途,每个方法的新用途!
| 归档时间: |
|
| 查看次数: |
5226 次 |
| 最近记录: |