Spring-MVC RequestMapping URITemplate 中的可选路径变量

2023-12-31

我有以下映射:

@RequestMapping(value = "/{first}/**/{last}", method = RequestMethod.GET)
public String test(@PathVariable("first") String first,  @PathVariable("last")  
  String last) {}

对于以下 URI:

foo/a/b/c/d/e/f/g/h/bar
foo/a/bar
foo/bar

foo 映射到 first 并将 bar 映射到 last 并且工作正常。

我想要的是将 foo 和 bar 之间的所有内容映射到单个路径参数中,如果没有中间参数则为 null(如最后一个 URI 示例):

@RequestMapping(value = "/{first}/{middle:[some regex here?]}/{last}", 
  method = RequestMethod.GET)
public String test(@PathVariable("first") String first, @PathVariable("middle")
  String middle, @PathVariable("last") String last) {}

非常困在正则表达式上,因为我希望有像 {middle:.*} 这样简单的东西,only映射到 /foo/a/bar 或 {middle:(.*/)*} ,这似乎没有映射到任何内容。

在应用正则表达式模式之前,AntPathStringMatcher 是否对“/”进行标记? (使交叉/不可能的模式)或者有解决方案吗?

仅供参考,这是春季 3.1M2

这看起来类似于@RequestMapping 控制器和动态 URL https://stackoverflow.com/questions/5879666/requestmapping-controlers-and-dynamic-urls但我在那里没有看到解决方案。


在我的项目中,我在 springframework 中使用内部变量:

@RequestMapping(value = { "/trip/", // /trip/
        "/trip/{tab:doa|poa}/",// /trip/doa/,/trip/poa/
        "/trip/page{page:\\d+}/",// /trip/page1/
        "/trip/{tab:doa|poa}/page{page:\\d+}/",// /trip/doa/page1/,/trip/poa/page1/
        "/trip/{tab:trip|doa|poa}-place-{location}/",// /trip/trip-place-beijing/,/trip/doa-place-shanghai/,/trip/poa-place-newyork/,
        "/trip/{tab:trip|doa|poa}-place-{location}/page{page:\\d+}/"// /trip/trip-place-beijing/page1/
}, method = RequestMethod.GET)
public String tripPark(Model model, HttpServletRequest request) throws Exception {
    int page = 1;
    String location = "";
    String tab = "trip";
    //
    Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
    if (pathVariables != null) {
        if (pathVariables.containsKey("page")) {
            page = NumberUtils.toInt("" + pathVariables.get("page"), page);
        }
        if (pathVariables.containsKey("tab")) {
            tab = "" + pathVariables.get("tab");
        }
        if (pathVariables.containsKey("location")) {
            location = "" + pathVariables.get("location");
        }
    }
    page = Math.max(1, Math.min(50, page));
    final int pagesize = "poa".equals(tab) ? 40 : 30;
    return _processTripPark(location, tab, pagesize, page, model, request);
}

See HandlerMapping.html#URI_TEMPLATE_VARIABLES_ATTRIBUTE http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/HandlerMapping.html#URI_TEMPLATE_VARIABLES_ATTRIBUTE

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

Spring-MVC RequestMapping URITemplate 中的可选路径变量 的相关文章

随机推荐

  • 使用 linq 和 NHibernate 3.0 进行分组

    据我所知 group by 只在 NHibernate 3 0 中添加 但即使使用版本 3 我也无法让 group by 工作 我尝试执行以下查询 Session Query GroupBy gbftr gt gbftr Tag Order
  • gevent (py)wsgi 优雅关闭

    我知道 通过搜索和检查 gevent 的源代码 优雅地关闭基于 gevent WSGI 的服务器的唯一方法是 server gevent wsgi WSGIServer 80 someWSGIApp def shutdown print S
  • JPA为什么使用createNamedQuery

    我正在将 DAO 层从使用 Hibernate API 更改为使用纯 JPA API 实现 看起来推荐的方法是使用实 体管理器中的 createNamedQuery 命名查询存储在模型 实体类的注释中 这对我来说没有意义 为什么要在模型对象
  • 使用 Testcontainers 时如何设置 Postgresql 的端口?

    有时我需要安装一个端口PostgreSQL 我在容器中运行它进行测试 但测试容器开发者命令Testcontainers删除了这个功能 但在某个地方有一个解决方案 通过设置 但我找不到它 谁有关于如何做到这一点的任何想法或信息 public
  • 如何在 MockMvc 中比较两个 jsonPath 值

    我正在使用 MockMvc 为我的 Spring 应用程序编写测试 假设我的 json 结果将具有以下格式 available true location ID 1 path local1 ID 2 path local2 ID 3 pat
  • 在Python中读取SUB之外的行[重复]

    这个问题在这里已经有答案了 新手问题 在 Python 2 7 2 中 我在读取文本文件时遇到问题 这些文件似乎意外包含一些控制字符 具体来说 循环 for line in f 一旦遇到包含以下内容的行就会停止 没有任何警告或错误SUB字符
  • XMLParser 和 SimpleXML 哪个更快

    你们觉得怎么样 我目前在整个项目中使用 SimpleXML 其平均内存使用量为 250KB 每次执行处理时间为 500 微秒 我只是打算切换到 XMLParser 非常感谢您的建议 编辑 实际微时间是 0 000578 微秒 我只是对毫和微
  • ZeroMQ (clrzmq4) 轮询问题

    我想要完成的是实现从两个套接字之一读取消息 无论消息首先到达何处 据我了解轮询 zmq poll 是正确的做法 如指南中的 mspoller http zguide zeromq org cs mspoller 在这里我将提供小的伪代码片段
  • Android datarouter logcat错误消息

    所以我的 logcat 被这个 datarouter 错误发送了垃圾邮件 任何人都可以帮助我解决这个问题并告诉我为什么会发生这种情况 哦 我尝试过重新启动手机和 eclipse 编辑 这似乎主要发生在我的 Mac 工作计算机上 以下是每 3
  • iOS 6 方向问题

    我有一个应用程序 通常是一个纵向应用程序 只显示一个 UIViewController 的横向视图 在新的 iOS 6 发布之前它都可以正常工作 我真的不明白方向在 iOS 6 中是如何工作的 所以我写了一个测试应用程序 这是我所做的 设置
  • 硒测试无法与任何元素相互作用

    所以我知道当我将 Django 设置中的 DEBUG 设置为 False 时 Selenium 无法访问静态文件 导致如下所示 但是 当我运行 Selenium 测试时 无论它们都能够与 DOM 交互并从下拉列表中选择项目 我目前拥有的测试
  • PPL - 如何配置本机线程数?

    我正在尝试使用 PPL 来管理本机线程的数量Scheduler类 这是我的代码 for int i 0 i lt 2000 i configure concurrency count 16 to 32 concurrency Schedul
  • 从 jruby-complete 消耗宝石

    我可以让我的jruby complete消耗传递给它的罐子中的宝石 但我想使用中央宝石库 这就是我现在可以做的 java jar jruby complete 1 6 5 jar S gem list LOCAL GEMS rake 0 8
  • 如何使用 Greasemonkey 代码替换 Head 脚本

    我想将 script js 替换为 demo js 有人请帮助我 尽早运行您的脚本 run at document start 添加事件监听器beforescriptexecute并检查脚本源 当您检测到所需的脚本时 调用preventDe
  • legend.only=T 时的图例属性(栅格包)

    仅绘制图例时 raster对象 颜色条 require raster r raster r 1 plot r legend F plot r zlim c 10 10 legend only T 如何控制图例轴标签大小 刻度长度和其他图例属
  • 带有拼写修复1扩展的SQLite与第二个查询时实体框架核心崩溃一起使用

    相关剥离项目 https github com djon2003 mediarecognizer spellfix1 https github com djon2003 mediarecognizer spellfix1 导入部分已被删除
  • android 获取当前视频视图的屏幕截图

    我看到了很多关于此的老问题 也许现在有一些解决方案 我想截取视频视图当前帧的屏幕截图 Videoview 使用 rtsp 流显示实时视频 我尝试拍摄位图 但它总是黑色 public static Bitmap loadBitmapFromV
  • 使用数据 URL 绘制图像

    我将从脚本开始 function saveInstance savedInstance document getElementById canvasID toDataURL function restoreInstance ctx draw
  • 在活动状态 onStop 上关闭/隐藏 Android 软键盘

    我有一个EditText and a Button在我的布局中 在编辑字段中写入后 单击此按钮go back my fragment 我想隐藏虚拟键盘 我认为有一个简单的方法 但我尝试了一些方法 但它不起作用 该代码显示了如何Button
  • Spring-MVC RequestMapping URITemplate 中的可选路径变量

    我有以下映射 RequestMapping value first last method RequestMethod GET public String test PathVariable first String first PathV