我在当前的项目中面临一个小问题,通过使用相同的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() && grade.isPresent()) {
return accountService.filtreListUsers(profession.get(), grade.get());
}
if(region.isPresent() && profession.isPresent() ) {
return accountService.filtreUsersByRegionProfession(region.get(), profession.get());
}
if(region.isPresent() && grade.isPresent()) {
return accountService.filtreUsersByRegionGrade(region.get(), grade.get());
}
return accountService.listUsers();
}
我参加的结果应该是这样的:http://localhost: 8084/用户/地区/年级:应该给出两个变量
的用户列表http://localhost: 8084/用户/区域/行业:应该给出两个变量
的用户列表Thanks for advance.
您的端点冲突。我建议你使用查询参数来过滤非路径变量。
@GetMapping("/users")
public List<AppUser> filtreListUsers(
@RequestParam Optional<String> region,
@RequestParam Optional<String> profession,
@RequestParam Optional<String> grade
){
if(profession.isPresent() && grade.isPresent()) {
return accountService.filtreListUsers(profession.get(), grade.get());
}
if(region.isPresent() && profession.isPresent() ) {
return accountService.filtreUsersByRegionProfession(region.get(), profession.get());
}
if(region.isPresent() && grade.isPresent()) {
return accountService.filtreUsersByRegionGrade(region.get(), grade.get());
}
return accountService.listUsers();
}
一些可能的url
/users?grade=xyz®ion=abc&profession=123
/users?grade=xyz®ion=abc
/users?grade=xyz&profession=123
/users?region=abc&profession=123