вызовите два разных метода отдыха с одним и тем же URI - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть два 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 голосов
/ 25 ноября 2018

Это даст неоднозначное исключение во время выполнения отображения, поскольку шаблон URL одинаков для обоих методов.

Если в вашем URL есть какой-то шаблон, например, запуск для суперпользователя или что-то еще, вы можете использовать шаблоны регулярных выражений, чтобы он работал.

В приведенном ниже примере первый метод метода вызывается, если переменная пути является цифрой, в противном случае второй метод для alphabets. Вы можете соответствующим образом изменить шаблон регулярного выражения.

@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";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...