Два запроса с одной и той же картой - PullRequest
0 голосов
/ 16 мая 2018

Мне нужно получить информацию о пользователе по ID и по имени пользователя.Могу ли я получить 2 таких запроса?

 @GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
    return userRepository.getOne(id);
}

@GetMapping("/user/{username}")
public User getUser(@PathVariable String username) {
    return userRepository.findUserByUsername(username);
}


public interface UserRepository extends JpaRepository<User,Long>{

@Query("SELECT u FROM u WHERE username= :#{username}")
User findUserByUsername(@Param("username") String username);
}

Ошибка: findUserByUsername(java.lang.String) but parameter 'Optional[username]' not found in annotated query 'SELECT u FROM u WHERE username= :#{username}'!

Ответы [ 4 ]

0 голосов
/ 16 мая 2018

Вы можете сделать это с параметром запроса:

@GetMapping(value = "/user", params = "id")
public User getUser(@RequestParam("id") Long id) {
    return userRepository.getOne(id);
}

@GetMapping(value = "/user", params = "username")
public User getUser(@RequestParam("username") String username) {
    return userRepository.findUserByUsername(username);
}
0 голосов
/ 16 мая 2018

Нет, вы не можете сделать это, поскольку оба запроса могут быть сопоставлены обоим методам. Лучший способ сделать это -

@GetMapping("/user")
public User getUser(@RequestParam("username") String username, @RequestParam("userId") Long userId) {
   // find by Criteria.
}

И назови это как,

http://<host>:<port>/<context>/user?userId=123&username=abc, параметры запроса atre необязательны, поэтому вы можете опустить все, что не нужно.

0 голосов
/ 16 мая 2018

Если я правильно помню, вы можете сделать это через регулярное выражение, например:

@GetMapping("/user/{id:[\\d]+}")
@GetMapping("/user/{username:^[a-fA-F]{100}$}")
0 голосов
/ 16 мая 2018

HTTP - это текстовый протокол, поэтому параметром пути всегда является строка.

Вы должны решить это с помощью @ RequestParam.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...