pagable sort.order忽略大小写

7eumitmz  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(368)

(我用的是micronaut)我有一个学生名单,我想按名字排序。我使用pageable和sort作为查询参数

http://localhost:8080/admin/students?page=0&size=10&sort=name,asc&status=graduated

我得到这个结果:
萨曼莎
提姆
安东尼奥
大卫
索非亚
而不是:
安东尼奥
大卫
萨曼莎
索非亚
提姆
我尝试了使用sort.order的选项,基于
分页和排序存储库如何不区分大小写排序?
spring-data-jpa:不区分大小写的orderby
我从url中删除了排序,并尝试了sort.order是否有效

Sort.Order order = new Sort.Order("name",Sort.Order.Direction.ASC, true);

http://localhost:8080/admin/students?page=0&size=10&status=graduated

但它没有,它也没有做任何排序
步骤:
存储库,添加了sort.order

@Repository
 public interface StudentRepository extends PageableRepository<Student, Long> {

    Page<Student> findByGraduatedIsNull(Student.Status status, @Nullable Pageable p, Sort.Order sort);

 }

服务

public Page<Student> getStudents(Student.Status status, Pageable pageable){

     Sort.Order order = new Sort.Order("name",Sort.Order.Direction.ASC, true);
     Page<Student> studentPage =
                     studentRepository.findByGraduatedIsNull(status, pageable, order);
     return studentPage.map(s -> studentTransform.toDto(s));

 }

有什么问题吗?

icomxhvb

icomxhvb1#

这个 Pageable 接口支持排序,所以不确定为什么要同时传递 Pageable 以及 Sort.Order 参数(我不知道是否支持)。如果url上没有定义排序,则 getSort()Pageable 你应该回来 UNSORTED . 所以这可能会成为先例 Sort.Order .
为什么不检查请求中是否传入了排序,如果没有,则将其默认为所需的排序,或者如果不允许传入排序,则直接重写它。

if (pageable.getSort == Sort.unsorted()) {
    List<Sort.Order> orders = new ArrayList<>();
    orders.add(new Sort.Order(Sort.Direction.ASC, "name").ignoreCase()); 
    pageable = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(orders));
}

Page<Student> studentPage = studentRepository.findByGraduatedIsNull(status, pageable)

相关问题