Phân trang khi có nhiều param truyền vào

E có 1 bài toán như này muốn tham khảo cách giải:

Hiện tại e đang muốn phân trang thì e thấy 2 cách 1 là tự viết bằng tay cách 2 là dùng PagingAndSortingRepository sẵn có của Spring boot để phân trang và e dùng cách 2

Bài toán của e ở đây là có rất nhiều param dc truyền vào trên URL. Vd với quần áo thì e sẽ có các param như giới tính, loại quần áo, giá, màu sắc ,… Với mỗi 1 param khi tạo method trong repository là 1 đối số truyền vào nhưng param đó có thể có hoặc ko VD đôi khi e chỉ cần giới tính sau đó e lọc theo giá thì e sẽ phải có hàm với 2 param là giới tính và giá nhưng đôi khi e cần 3 param hay 1 param hay 2 param nhưng là các loại điều kiện khác(loại quần áo+giá, giới tính + màu sắc,…) như vậy số method em phải viết ra(nếu có 4 param) sẽ là 15 method.

Thì e nghĩ cách để giảm số lượng method phải viết bằng cách tạo thêm method trong service. Tức là như này: lớp Dao sẽ chứa các repository nó sẽ lấy dữ liệu từ database nhưng service thì e sẽ dùng nó để lọc cái list sản phẩm mà e lấy dc từ database theo giá, màu sắc. E sẽ tạo thêm 3 hàm(2 hàm 2 đối số 1 hàm 3 đối số) với đối số cả 3 đều có list sản phẩm lấy từ database còn lại lần lượt là giá vs màu sắc và cả giá lẫn màu sắc. Tóm lại là e lọc tiếp từ list sản phẩm lấy dc từ database với 2 điều kiện động thay vì lọc ngay khi lấy từ database với 4 điều kiện động.

Nhưng khi viết hàm service, e dùng for để lặp lại list đó rồi sét if(giá, màu sắc =…) đúng thì add vào list mới và return về list mới. Ở đây bắt đầu có vấn đề đó là kiểu dữ liệu trả về của cái list sản phẩm e lấy từ database ko phải là List mà là Page dẫn đến việc e phải ép kiểu nó sang nhưng nó ko cho ép kiểu và bắn ra lỗi là can not cast từ Arraylist sang Page.

  • Liệu có kiểu dữ liệu nào trong java giúp em ép sang Page dc ko?
  • Em nên giải bài này theo hướng nào ạ?(mấy trang web bán hàng mà cần lọc nhiều thì họ làm theo cách nào?)
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?