Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换的@PathVariables可以相互引用吗?_Java_Spring_Spring Mvc_Annotations - Fatal编程技术网

Java 转换的@PathVariables可以相互引用吗?

Java 转换的@PathVariables可以相互引用吗?,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,我有一个Spring@RequestMapping和几个@PathVariables,第一个是缩小到第二个所必需的,您可以在下面的示例中看到,为了获得模块,我需要获得部门。使用普通的String@PathVariables,我可以这样做: @RequestMapping("/admin/{dept}/{mod}/") public String showModule(@PathVariable String dept, @PathVariable String mod) { Depart

我有一个Spring
@RequestMapping
和几个
@PathVariable
s,第一个是缩小到第二个所必需的,您可以在下面的示例中看到,为了获得模块,我需要获得部门。使用普通的
String
@PathVariable
s,我可以这样做:

@RequestMapping("/admin/{dept}/{mod}/")
public String showModule(@PathVariable String dept, @PathVariable String mod) {
    Department department = dao.findDepartment(dept);
    Module module = department.findModule(mod);
    return "view";
}
但是我非常希望使用Spring的
Converter
API将
部门直接指定为
@PathVariable
。因此,在我注册了一个自定义的
转换器
类之后,这就可以工作了:

@RequestMapping("/admin/{dept}/")
public String showDept(@PathVariable Department dept) {
    return "view";
}
但是Converter API不提供正在转换的单个参数之外的访问权限,因此不可能为
模块
实现
转换器
。有没有其他API可以使用?我正在关注
HandlerMethodArgumentResolver
-有人解决过这样的问题吗,还是你坚持使用String@PathVariables


我使用的是Spring 3.1。

我没有这样做,但我想到的一种方法是为这两个版本制作一个单独的转换器:

@RequestMapping("/admin/{deptAndModule}/")
public String showDept(@PathVariable DepartmentAndModule deptAndModule) {
    return "view";
}
并使转换器能够采用“deptid modid”形式的输入,例如“ch-c104”。由于请求与/admin/*/的RequestMapping模式不匹配,因此不可能用斜杠分隔它们


在我的例子中,需求发生了轻微的变化,因此模块代码是完全唯一的,不需要限定在部门范围内。所以我不需要再这样做了。如果我这样做了,我可能会避免自动模块转换,而使用该方法手动进行转换。

那么您需要了解部门才能加载模块?