1

我对@RequestMapping URI 模板有疑问。我构建了一个控制器来处理用户详细信息更新。我在下面写了两种方法。

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}")
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String applicationModuleType,
                                                           @PathVariable String userCountryCode, 
                                                           @PathVariable String applicationModuleId,
                                                           Model model) {
    System.out.println("************ form:Submited");
    }
    return null;
}

@RequestMapping(value="/updateUser/**")
public @ResponseBody Object handleRequest(Model model) {
    System.out.println("************ form:Submited all");
    return null;
}

请求 URI 类似于 /project_name/updateUser/app/au/132

当我在 tomcat 中运行这个应用程序时,第一个方法永远不会被调用。控制器始终使用第二个。但是在spring framework doc中,它说“一个方法可以有任意数量的@PathVariable注释”。

所以,我无法弄清楚为什么我不能在一个方法中使用三个 @PathVariable 注释。

另一件事是,如果我像下面这样更改第一个方法 @RequestMapping 注释,则可以调用它。

    @RequestMapping(value="/updateUser/app/{userCountryCode}/{applicationModuleId}")
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String userCountryCode, 
                                                           @PathVariable String applicationModuleId,
                                                           Model model) {
    System.out.println("************ form:Submited");
    }
    return null;
}

似乎 spring 无法在 ONE 方法中处理三个 @PathVariable 注释。

有没有人可以告诉我为什么或哪里做错了,拜托?

提前致谢!

4

2 回答 2

3

与路径变量无关,您只是有冲突的映射。

/updateUser/**

/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}

将匹配相同的 URI:s。

于 2012-02-20T10:07:49.113 回答
2

当三个 @PathVariable 注解时,Spring 会认为 @RequestMapping(value="/updateUser/**") 匹配的比 /updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId} 更多

如果你删除

@RequestMapping(value="/updateUser/**")

你会发现它会调用

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}")

您应该使用 @RequestParam 来传递参数。不是@PathVariable。

于 2012-02-20T10:07:05.710 回答