我在Sping 3.0中有一个现有的应用程序,它使用ControllerClassNameHandlerMapping来映射Controller和方法,例如:

StartController.class is mapped to http://127.0.0.1/app/start/*

然后

StartController.class has a method called init() that is mapped to http://127.0.0.1/app/start/init.html

这是我的配置:

@Bean
public ControllerClassNameHandlerMapping classNameControllerMappings() {
     return new ControllerClassNameHandlerMapping() {{
        setCaseSensitive(true);
        setDefaultHandler(new UrlFilenameViewController());
        setInterceptors(new Object[]
                {callProgressionInterceptorHandler(),
                 callSessionInterceptorHandler(),
                 localeChangeInterceptor()});
     }};
}

我的大多数控制器在每个控制器中都有5-15个请求映射方法。

但是当我升级到Spring 3.1+时,请求映射对于每个控制器都变得模糊不清,并且没有正确映射。

我已经读过一个解决方案是明确添加方法名称:

@RequestMapping(method = RequestMethod.GET)

现在将是:

@RequestMapping(method = RequestMethod.GET, value = "init")

如果我不需要,我真的不想手动将@RequestMapping值添加到100多种方法中。

任何人都可以帮助更好的解决方案?

这是我一直得到的错误:

        47672 [btpool0-1] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'addressConfirmationController' bean method
    public void com.comcast.ivr.d2.web.controllers.AddressConfirmationController.houseNumber_rc(org.springframework.ui.ModelMap)
    to {[],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'addressConfirmationController' bean method

我还添加了setOrder(1); 到ControllerClassNameHandlerMapping仍然得到这个错误。

更新:我在http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html上看到以下摘录:

在Spring 3.1之前,在两个单独的阶段中检查类型和方法级请求映射 - 首先通过DefaultAnnotationHandlerMapping选择控制器,然后通过AnnotationMethodHandlerAdapter缩小调用的实际方法。

使用Spring 3.1中的新支持类,RequestMappingHandlerMapping是唯一决定应该处理请求的方法的地方。 将控制器方法视为唯一端点的集合,其中每个方法的映射都是从类型和方法级别的@RequestMapping信息派生的。

这是否意味着我不能保持相同的@RequestMapping而不在@RequestMapping中添加映射细节,因为我做<3.1?

我有数百种方法需要修改,以便发生这种情况...... :-(

  ask by Mick Knutson translate from so

本文未有回复,本站智能推荐:

2回复

tile2定义不适用于ControllerClassNameHandlerMapping

我正在使用ControllerClassNameHandlerMapping以避免显式将URL映射到控制器,到目前为止,它工作正常。 我在index.jsp中有一个指向welcome.html的链接,该链接已正确映射到welcomeController,其中包含以下内容: 问题是,当我
2回复

无XML的Spring 3.1没有为HTTP请求找到映射

我已经搜索了谷歌,stackoverflow,以及我可以看几天的每个论坛,我的键盘很可能成为头部的目标。 我正在运行一个非常小的Spring 3.1 MVC,它具有无XML设置。 问题是,当我启动时,我看到了; 然而,当我尝试点击这些URL中的任何一个时,我看到我的控制器内的日志
1回复

SpringMVC URL映射

今天,我已经在Amazon EC2上成功部署了tomcat战争。 在我的本地计算机上,以下链接:localhost:8080 / login可以正常工作 但是在我的EC2实例上,链接始终必须在链接中具有.war名称: http:// some-amazon-link:8080 /
1回复

Spring 3.0 URL映射问题

我正在测试从Tomcat的Spring 2.0到Spring 3.0.5的升级,并且遇到一个问题,即带有斜杠的URL与没有斜杠的相同URL的映射行为不同。 例如,在我的Spring 2.0实现中,按照下面的Spring MVC XML配置,以下URL都将映射到相同的控制器类: /s
1回复

Spring 3.1 ViewResolver用于本地内容(swf对象)

在我的项目中,我的jsp表单包含一个swf对象,该对象位于“ WEB-INF / fl”中。 发布项目时,出现swf对象“找不到URL映射”错误。 如何提供本地内容? 我的ViewResolver Bean: 控制器类: 但是,当我在服务器上发布项目时,出现以下错误:
8回复

动态Web模块3.0 - 3.1

我有一个基于代码的mavenized配置Spring 3.2.4 Web应用程序。 当我使用Maven / pom.xml构建应用程序时,我得到一个错误,即web.xml丢失。 首先,我尝试创建一个空的web.xml。 这是项目方面发生变化的时刻(我不知道为什么)。 它从动态Web模块3
2回复

使用ControllerClassNameHandlerMapping和@Controller并扩展AbstractController

实际上我以为我在尝试一些非常简单的事情。 ControllerClassNameHandlerMapping听起来很棒,可以使用非常精简的配置生成一个小型弹簧webapp。 只需使用@Controller注释Controller,让它扩展AbstractController,配置不需要超过这
1回复

将Spring Security 3.0升级到Spring Security 3.1时,Spring Security无法正常工作

我已经成功地将Spring Security 3.0集成到Web应用程序中,并且运行良好,现在我要将Spring Security 3.0升级到3.1,并且在我的CustomAuthenticationManager中遇到问题每当我尝试登录时,CustomAuthenticationManage
1回复

SpringMVC错误

情况1: Iam出现以下错误: 当IAM使用以下表格时: 案例2:我在提交以下表格后获得404,我的意思是这个网址: http://localhost:8443/BugTrackingSystem/login 当IAM使用以下表格时: 其他文件: * LOGINCO
2回复

我们如何使用spring注释实现controllerclassnamehandlermapping

我有一个带有两个控制器类的spring MVC应用程序,如下所示。 我使用' <mvc:annotation-driven /> '和' <context:component-scan base-package="test.controller" /> '来标识控