0

我正在使用 Spring MVC 3.2

我需要这样的东西(伪代码,注意[]):

@RequestMapping("/jpm/[{owners}/{ownersIds}/]{entity}/list")
public ModelAndView doSomething(
        @PathVariable List<String> owners,
        @PathVariable List<String> ownersIds,
        @PathVariable String entity){
   ...
}

我需要这样的网址

/test/1/test2/5/test3/120/something/list

映射到

owners = ["test", "test2", "test3"]
ownersIds = [1,5,120]

/test/1/test2/5/something/list

映射到

owners = ["test", "test2"]
ownersIds = [1,5]

这可以用正则表达式吗?如何?

更新 1:

或者,我可以尝试自己解析所有者列表,但找不到正确的表达式:

@RequestMapping("/jpm/(1){entity}/list")
public ModelAndView doSomething(
        @PathVariable List<String> owners, (1)
        @PathVariable String entity){
   ...
}

我需要(1)中的一些东西告诉我“任何形式的 xx/xx/ 任意次数,可以选择没有”

那可能吗?

4

1 回答 1

2

我的第一个倾向是告诉你看看Matrix Variables,但我想你可能已经有了?无论如何,您需要不同的模式:

// First an example request:
// GET /jpm/owners;names=bob,jim,john;ids=1,2,3/entityName/list
@RequestMapping("/jpm/owners/{entity}/list")
public ModelAndView doSomething(
    @MatrixVariable Map<String,List<String>> matrixVariables,
    @PathVariable String entity) {
    // matrixVariables now contains a map with values:
    // "names" => ["bob", "jim", "john"]
    // "ids" => ["1", "2", "3"]
    // ...and then obviously the entity variable resolves to "entityName"
}

我直接在这里输入了所有内容,所以我没有测试它。如果有机会,我会尝试一下,然后回来进行适当的编辑。希望它无论如何都会有所帮助。

评论后编辑

我想矩阵变量的使用是否是“RESTful”是有争议的,这是一个没有官方标准的术语,但是 Spring 和 WADL 等支持矩阵变量,所以我猜这给了他们一些支持。无论如何,我相信 Spring 根本不支持在 a 中使用“/” @PathVariable,无论您是否使用正则表达式。即使您确实走了那条路,就像您说的那样,您也必须解析结果以拆分结果列表中的每个项目。相反,为什么不将逗号分隔的列表作为字符串传递,让 Spring 为您进行解析呢?

// GET /jpm/owners/bob,jim,john/1,2,3/myEntity/list
@RequestMapping("jpm/owners/{names}/{ids}/{entity}/list")
public String getTest(
    @PathVariable List<String> names, 
    @PathVariable List<String> ids, String entity) {
    // names = ["bob", "jim", "john"]
    // ids = ["1", "2", "3"]
}
于 2013-10-30T22:31:24.490 回答