Пагинация java spring и параметры запроса
подскажите как правильно реализовать получение списка пользователей (users) с фильтрацией по компании с пагинацией? Реализовал соответствующие методы. По отдельности они работают: http://localhost:8080/api/users?page=0&limit=10 http://localhost:8080/api/users?companyName=Техно
при попытке сделать запрос: http://localhost:8080/api/users?page=0&limit=10&companyName=Техно
падает с ошибкой
Ambiguous handler methods mapped for '/api/users': {public org.springframework.http.ResponseEntity com.example.books_shope.controllers.UserController.getUsersCompanyName(java.lang.String), public org.springframework.http.ResponseEntity com.example.books_shope.controllers.UserController.getAllPage(java.lang.Integer,java.lang.Integer)}
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:432) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1266) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1048) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.26.jar:5.3.26]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.26.jar:5.3.26]
Подскажите в чем ошибаюсь, где нужно доработать логику чтобы запрос http://localhost:8080/api/users?page=0&limit=10&companyName=Техно отработал?
@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "http://localhost:63342")
public class UserController {
@Autowired
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping
public ResponseEntity createUser (@RequestBody Users user) {
userService.addUser(user);
return ResponseEntity.ok("Пользователь успешно создан");
}
// получить список пользователей
@GetMapping
public ResponseEntity getAll() {
return ResponseEntity.ok(userService.getAllUsers());
}
// метод с пагинацией получить список пользователей
@GetMapping(params = "page")
public ResponseEntity getAllPage(
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "limit", required = false) Integer limit) {
return ResponseEntity.ok(userService.getPageUsers(page, limit).getContent());
}
//фильтр по компании
@GetMapping(params = "companyName")
public ResponseEntity<List<Users>> getUsersCompanyName(@RequestParam("companyName") String company) {
return ResponseEntity.ok(userService.getUsersByCompanyName(company));
}
}
@Service
public class UserService {
@Autowired
private UserRepo userRepo;
public UserService(UserRepo userRepo) {
this.userRepo = userRepo;
}
// логика создания пользователя
public Users addUser(Users user) {
userRepo.save(user);
return user;
}
// логика получения списка пользователей
public Iterable <Users> getAll() {
return userRepo.findAll();
}
// фильтр по компании
public List<Users> getUsersByCompanyName(String company) {
return userRepo.findUsersByCompanyNameContaining(company);
}
// логика получения списка пользователей с пагинацией
public Page<Users> getPageUsers(Integer page, Integer limit) {
Pageable nextPage = PageRequest.of(page, limit);
return userRepo.findAll(nextPage);
}
public List<Users> getAllUsers() {
return userRepo.findAll();
}
}
public interface UserRepo extends JpaRepository<Users, Long> {
// фильтрация по статусу
Users findByStatus(String status);
List<Users> findUsersByStatus(UserStatus status);
// фильтрация по компании
Users findByCompanyName(String company);
List<Users> findUsersByCompanyNameContaining(String userCompanyName);
}
@Data
@Entity
@Table(name="users")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name="surname")
private String surname;
@Column(name="company_name")
private String companyName;
@Column(name = "email")
private String email;
@Column(name="post")
@Enumerated(EnumType.STRING)
private UserPost post;
public UserPost getPost() {
return post;
}
public void setPost(UserPost post) {
this.post = post;
}
@Column(name="department")
private String department;
@Column(name="status")
@Enumerated(EnumType.STRING)
private UserStatus status;
public UserStatus getStatus() {
return status;
}
public void setStatus(UserStatus status) {
this.status = status;
}
}
Источник: Stack Overflow на русском