问题
I like to keep all my mapping in the same place, so I use XML config:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/video/**=videoControllerr
/blog/**=blogController
</value>
</property>
<property name="alwaysUseFullPath">
<value>true</value>
</property>
</bean>
If I create a second request mapping with the same name in a different controller,
@Controller
public class BlogController {
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info(@RequestParam("t") String type) {
// Stuff
}
}
@Controller
public class VideoController {
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info() {
// Stuff
}
}
I get an exception:
Caused by: java.lang.IllegalStateException: Cannot map handler 'videoController' to URL path [/info]: There is already handler of type [class com.cyc.cycbiz.controller.BlogController] mapped.
Is there a way to use the same request mappings in different controllers?
I want to have 2 urls as:
/video/info.html
/blog/info.html
Using Spring MVC 3.1.1
EDIT: I' not the only one: https://spring.io/blog/2008/03/24/using-a-hybrid-annotations-xml-approach-for-request-mapping-in-spring-mvc
The rest of the app works perfectly.
回答1:
Just put a requestmapping at the level of the Controller also:
@Controller
@RequestMapping("/video")
public class VideoController {
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info() {
// Stuff
}
}
@Controller
@RequestMapping("/blog")
public class BlogController {
@RequestMapping(value = "/info", method = RequestMethod.GET)
public String info(@RequestParam("t") String type) {
// Stuff
}
}
回答2:
You can use parameter per method mapping. See my question and answer:
- @RequestMapping with "params" on same URL in different classes cause "IllegalStateException: Cannot map handler" in JUnit with SpringJUnit4ClassRunner
- https://stackoverflow.com/a/14563228/173149
来源:https://stackoverflow.com/questions/11255706/spring-mvc-3-same-requestmapping-in-different-controllers-with-centralised-xm