用相同的URI调用两个不同的rest方法

时间:2018-11-23 14:15:41

标签: rest api spring-mvc

我有两个Rest URI:

// URI n1 :  GET /users/{userName}  
public ResponseEntity<userDto> findUserByName(
        @PathVariable( value = "userName", required = true) 
        String userName
        );

// URI n2 :  GET /users/{userID}  
public ResponseEntity<userDto> findUserByID(
        @PathVariable( value = "userID", required = true) 
        Long userID
        );

当我调用GET /users/SuperUser123时,我希望第一个函数响应;当我调用GET /users/1854时,我希望第二个函数响应。真正发生的是,在两种情况下都总是调用第一个函数(因为参数始终是String类型的。)

那么在遵守REST API URI建议的同时如何实现我想要的?

1 个答案:

答案 0 :(得分:0)

由于两种方法的url模式相同,因此将给出模糊的映射运行时异常。

如果您的网址具有某种模式(例如超级用户启动)或其他某种形式,则可以使用正则表达式模式使其正常工作。

在下面的示例中,如果path变量是数字,则将调用第一个方法method,否则将调用第二个字母方法。您可以相应地更改正则表达式模式。

@RequestMapping("{id:[0-9]+}")
    public String handleRequest(@PathVariable("id") String userId, Model model){
        model.addAttribute("msg", "profile id: "+userId);
        return "my-page";

    }

    @RequestMapping("{name:[a-zA-Z]+}")
    public String handleRequest2 (@PathVariable("name") String deptName, Model model) {
        model.addAttribute("msg", "dept name : " + deptName);
        return "my-page";
    }