【发布时间】:2018-03-10 07:21:02
【问题描述】:
我尝试在 Struts 2 的动态 URL 模式中包含点 .,但它不起作用
我的动态 URL 的 Struts 2 配置如下
<struts>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
<package name="api" extends="struts-default" namespace="/">
<action name="api/v1/{sid}/function/{id}/version/{ver}" class="com.test.Main" method="test">
<param name="sid">{sid}</param>
<param name="id">{id}</param>
<param name="ver">{ver}</param>
</action>
</package>
如果我给触发器一个 URL 中没有任何点的 URL,那么它正在工作
/api/v1/test/function/1234/version/1
但是如果我将它与点一起使用,那么它会给出 404
/api/v1/test/function/1234/version/1.1
为什么它不起作用?如何让它发挥作用?
【问题讨论】:
-
我自己没有使用它,但
RegexPatternMatcher上的 JavaDoc 说:“正则表达式可以采用 {FIELD_NAME} 或 {FIELD_NAME:REGULAR_EXPRESSION} 的形式。” - 所以你可以试试{ver:\d+(\.\d+)?}。 -
好一个。最后一节中的点很棘手,因为它通常用于表示动作扩展。你可以创建自己的
ActionMapper来处理这个问题,或者在/{ver}部分之后添加一些额外的东西。 -
您也可以创建改进请求 - issues.apache.org/jira/projects/WW。
标签: java url struts2 action-mapping