SpringMVC 3.0到3.1的ControllerClassNameHandlerMapping迁移

2024-01-08

我在 Spring 3.0 中有一个现有应用程序,它使用 ControllerClassNameHandlerMapping 来映射控制器和方法,例如:

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

then

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 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 信息派生的映射。

这是否意味着我无法像

为了实现这一点,我有数百种方法需要修改......:-(


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC 3.0到3.1的ControllerClassNameHandlerMapping迁移 的相关文章

随机推荐

  • Kotlin 高阶函数组合

    我试图弄清楚如何在 Kotlin 中将一个函数声明性地定义为其他两个函数的组合 但我正在努力 这是我的代码 fun compose a Int Int gt Int b Int Int gt Int Int return a invoke
  • 如何从带有 url 的网页读取 Open Graph 和元标记

    我希望我的网站能够在用户将链接粘贴到邮箱时提取有关网页的信息 类似于 Facebook 我想知道像 Google Reddit 和 Facebook 这样的网站如何能够仅通过 URL 来检索缩略图 标题和描述 有人知道他们是如何做到这一点的
  • WordPress 表单未提交

    您好 我对 WordPress 非常陌生 根据我的要求 我在 WordPress 主题中创建了几个 php 文件 其中detailsform php包含
  • 如何通过 MongoDB PHP 中的嵌入项查找文档

    我在 MongoDB 中有下一个文档 竞赛文件 id ObjectId 502aa915f50138d76d11112f7 contestname Contest1 description java programming contest
  • JavaScript 可以连接 MySQL 吗?

    JavaScript 可以连接 MySQL 吗 如果是这样 怎么办 如果没有某种桥接器 客户端 JavaScript 无法访问 MySQL 但上面关于 JavaScript 只是一种客户端语言的大胆说法是不正确的 JavaScript 可以
  • Android:GridLayout 大小和 View.GONE 行为

    I want to make a GridLayout that when one of it s children s Visibility is set to GONE it is replaced by the next child
  • 将变量传递给 JavaScript 对象

    你能帮我解决我的问题吗 我有以下 JavaScript 对象 var data rows 0 name foshka rows 0 tel 096 rows 0 opt none 问题是我在尝试将变量作为行索引传递时收到错误 var i 0
  • 如何在 PowerShell 中获取数字 HTTP 状态代码

    我知道有一个几个好方法 http scriptolog blogspot com 2007 08 query http status codes and headers html在 PowerShell 中构建 Web 客户端 NET 类
  • 如何在 GEKKO GUI 中显示解决方案?

    我想探索 GEKKO Web GUI 用于可视化结果的功能 如中所述https www researchgate net publication 326740143 GEKKO optimization suite https www re
  • 为什么 Darwin 的 strtod 线程不安全?

    以下测试总是在我的 Intel Mac Mini 上产生故障或总线错误 编译器 uname a Darwin vogon13 9 8 0 Darwin Kernel Version 9 8 0 Wed Jul 15 16 55 01 PDT
  • 用 C++ 构建最小的 VST3 主机

    我正在努力寻找有关如何使用 VST 3 x SDK 设置最小插件主机的基本示例 官方文档绝对是简明扼要的 我无法得到任何地方 我想 了解最小的设置 所需的标头 要实现的接口 加载 VST3 插件 暂时没有花哨的 GUI 打印出一些数据 例如
  • gitignore 无法与 Visual Studio 一起使用

    我正在尝试将我的项目更改从使用 Visual Studio 2017 的 C 项目提交并推送到我的私有 gitea 存储库 不幸的是 构建输出 如 bin debug 以及 VS 缓存文件夹 vs 始终被添加到更改列表中 当我输入 git
  • Golang:如何使用 DES、CBC 和 PKCS7 解密?

    目前正在尝试找出为什么我的解密方法不起作用 我使用 DES CBC 和 PKCS7Padding 来加密我的字符串 我现在的code https play golang org p FZN6POxqU8输出panic crypto ciph
  • SQL:连接两个表,其中列为空

    我正在使用mysql数据库 我有两个表错误和配置文件 Bugs 表有两列 signed to qa contact 通过多对一关系指向配置文件 这些是我的查询的简化版本 首先 我试图这样做 但它返回重复的行 其中 bugs 表中 qa co
  • 在 Windows 的 virtualenv 中安装 lxml

    我最近开始使用 virtualenv 并且想在这个隔离环境中安装 lxml 通常我会使用 Windows 二进制安装程序 但我想在此 virtualenv 中使用 lxml 不是全局 Pip install 不适用于 lxml 所以我不知道
  • Entity Framework Core Linq 查询来过滤相关实体

    我已经弄清楚如何在使用 Include 时编写通过 Entity Framework Core 过滤相关实体的查询很长时间 假设我有以下两个类 public class Order public int OrderId get set pu
  • 如何在 Angular 中触发文件上传输入?

    如何在 Angular 4 中触发文件上传输入 我正在尝试 但它不起作用 我必须单击 div 并触发输入类型按钮 而不是输入按钮 应用程序 html
  • 如何在 tkinter 应用程序执行期间禁用“D_Lib”信息/警告消息?

    我正在开发一个 python tkinter 应用程序PyCharm 2017 1 2 Community Edition并将软件打包为pyinstaller 3 2 1 在应用程序运行时 有时 尚未找到根本原因事件 我会将此信息 警告消息
  • 更改 Jenkins 内部版本号

    有没有办法更改作业完成后通过电子邮件发送的内部版本号 问题是产品构建不是由 Jenkins 完成的 因此我们希望能够获取构建号 即从文本文件中 并更新 Jenkins 中的构建号以匹配它 我尝试设置内部版本号 set BUILD NUMBE
  • SpringMVC 3.0到3.1的ControllerClassNameHandlerMapping迁移

    我在 Spring 3 0 中有一个现有应用程序 它使用 ControllerClassNameHandlerMapping 来映射控制器和方法 例如 StartController class is mapped to http 127