RequestMapping具有多种模式

时间:2012-08-07 15:55:01

标签: spring

我有一个带两种方法的控制器。一个用于删除另一个用户以从角色中删除用户。

    @Controller
    @RequestMapping(value="/rest/users/**")
    public class UsersCtrlr {

        @RequestMapping(value="/{username:.+}", method=RequestMethod.DELETE)
        public @ResponseBody HttpStatusDoc deleteUser(HttpServletRequest req, @PathVariable String username) {
         ...
        }

        @RequestMapping(value="/{username:.+}/roles/{role:.+}", method=RequestMethod.DELETE)
        public @ResponseBody HttpStatusDoc deleteUserRole(HttpServletRequest req, @PathVariable String username, @PathVariable String role) {
         ...
        }
    }

我的前端使用url进行jquery ajax调用,如下所示:

/rest/users/jdoe@foo.com/roles/some_role

这个uri被映射到deleteUser方法,username等于some_role

我正在尝试让uri映射到deleteUserRole并将username设置为jdoe@foo.com并将role设置为some_role

为什么uri不会映射到deleteUserRole? 它与RequestMappings中的正则表达式有关吗?

1 个答案:

答案 0 :(得分:0)

可能是因为您的班级中有** @RequestMapping注释,deleteUser的映射将为/rest/users/**/{username:.+},而deleteUserRole的映射将为/rest/users/**/{username:.+}/roles/{role:.+},第一个将匹配/rest/users/jdoe@foo.com/roles/some_role模式。如果从类@RequestMapping注释

中删除**,它应该有效