当前位置: 首页 > 知识库问答 >
问题:

Spring MVC3:在不同的控制器中使用相同的@RequestMapping,使用集中的XML URL映射(混合XML/注释方法)

松铭
2023-03-14

我喜欢把所有的映射都放在同一个地方,所以我使用XML配置:

<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>

如果我在不同的控制器中创建了具有相同名称的第二个请求映射,

@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
    }
}
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.
/video/info.html

/blog/info.html

应用程序的其余部分工作完美。

共有1个答案

楚博雅
2023-03-14

只需将requestmapping放在控制器级别:

@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
    }
}
 类似资料:
  • 我的应用程序中有两个方法,它们使用相同的请求映射和不同的(http)方法 是否有可能在不同的控制器中定义它们,或者我应该考虑一些(可怕的)变通方法(比如重命名一个URL)?

  • 我试图在我的Spring应用程序中实现API版本控制。 所以我想做这样的事情api_url/{版本}/{参数} 假设我已经更改了一个endpoint函数,那么我可以将新函数映射到新版本的新url。但是我希望其他未更改的函数映射到两个版本的url,比如API _ URL/{旧版本}/{旧参数}和API _ URL/{新版本}/{旧参数} 因此,如果我能够实现这样的东西,它将帮助我避免在Java类中重

  • 我试图将所有映射到相同的DTO类,我希望避免为每个类型声明一个方法,或者为每个枚举字段使用。 然后在我的其他地图上 但MapStruct仍在为每种枚举类型生成一种新的映射方法,而且实现方式不符合我的需要。 有没有办法用MapStruct做到这一点?还是太神奇了D

  • 我有一段代码- 但是,ConditionalOn 批注无法按预期方式工作。我不希望控制器执行,如果不是的。注意 - 位于中 我错过了什么吗?可能是类级别的注释?

  • 这个动作被一个LoginController映射,成功登录后,用户回到相同的,但作为登录用户,并用欢迎消息迎接用户。 index.htm还有另一个名为itemform的表单,它允许用户将项目名称作为文本添加。此操作由itemController控制。 我的问题是我的LoginController和itemController都有相同的请求映射,因此我得到了这个错误: 创建名为“org”的bean时

  • 我有一个类CustomerProfile,它映射到一个表CUST_PROFILE。我们需要在一个单独的表中维护关闭的概要文件,该表将具有相同的模式。我在SO中读过很多问题,特别是下面的问题(下面有一个总结了很多类似问题的答案) 每个实体Hibernate两个表 从中我可以理解,使用MappedSuperclass以外的注释很难获得相同的结果。但可以使用xml映射。 我之所以不愿使用Mappedsu