#spring-boot #rest #spring-data
Вопрос:
Во время моего текущего проекта я столкнулся с небольшой проблемой, создав несколько конечных точек с одним и тем же URI, но с разными переменными пути, как показано в приведенном ниже коде:
@GetMapping(value= { "/users",
"/users/{grade}/{profession}",
"/users/{region}/{profession}",
"/users/{region}/{grade}",
})
public List<AppUser> filtreListUsers(
@PathVariable Optional<String> region,
@PathVariable Optional<String> profession,
@PathVariable Optional<String> grade
){
if(profession.isPresent() amp;amp; grade.isPresent()) {
return accountService.filtreListUsers(profession.get(), grade.get());
}
if(region.isPresent() amp;amp; profession.isPresent() ) {
return accountService.filtreUsersByRegionProfession(region.get(), profession.get());
}
if(region.isPresent() amp;amp; grade.isPresent()) {
return accountService.filtreUsersByRegionGrade(region.get(), grade.get());
}
return accountService.listUsers();
}
Результат, на котором я присутствую, должен быть таким :
http://localhost:8084/users/region/grade : должен дать мне список пользователей по обоим вариантам
http://localhost:8084/users/region/profession : должен дать мне список пользователей по обоим вариантам
Спасибо за заранее.
Ответ №1:
Ваши конечные точки противоречат друг другу. Я предлагаю вам использовать параметры запроса для фильтрации, а не переменные пути.
@GetMapping("/users")
public List<AppUser> filtreListUsers(
@RequestParam Optional<String> region,
@RequestParam Optional<String> profession,
@RequestParam Optional<String> grade
){
if(profession.isPresent() amp;amp; grade.isPresent()) {
return accountService.filtreListUsers(profession.get(), grade.get());
}
if(region.isPresent() amp;amp; profession.isPresent() ) {
return accountService.filtreUsersByRegionProfession(region.get(), profession.get());
}
if(region.isPresent() amp;amp; grade.isPresent()) {
return accountService.filtreUsersByRegionGrade(region.get(), grade.get());
}
return accountService.listUsers();
}
Некоторые из ваших возможных URL-адресов
/users?grade=xyzamp;region=abcamp;profession=123
/users?grade=xyzamp;region=abc
/users?grade=xyzamp;profession=123
/users?region=abcamp;profession=123
Комментарии:
1. Спасибо за помощь, он отлично работает с парами. @ZohaibAhmed
2. Не могли бы вы принять ответ, если бы он сработал для вас? Спасибо