spring @RequestMapping URI模板错误

时间:2012-02-19 21:41:46

标签: spring uri spring-annotations

我对@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注释。

有人能告诉我为什么或在哪里做错了吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

/updateUser/**

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

将匹配相同的URI:s。

答案 1 :(得分:2)

当三个@PathVariable注释Spring会想到@RequestMapping(value =“/ updateUser / **”) 匹配多于/ updateUser / {applicationModuleType} / {userCountryCode} / {applicationModuleId}

如果删除

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

你会发现它会调用

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

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