如何解决Pagable Sort.Order 忽略大小写
(我正在使用 Micronaut) 我有一个学生名单,我想按姓名对其进行排序。我使用 Pageable 和 sort 作为查询参数
http://localhost:8080/admin/students?page=0&size=10&sort=name,asc&status=graduated
我得到了这个结果:
- 萨曼莎
- 蒂姆
- 安东尼奥
- 大卫
- 索菲亚
代替:
- 安东尼奥
- 大卫
- 萨曼莎
- 索菲亚
- 蒂姆
我已经尝试过使用 Sort.Order 的选项,基于
PagingAndSortingRepository how to sort case insensitive?
Spring Data JPA: case insensitive 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",true); Page<Student> studentPage = studentRepository.findByGraduatedisNull(status,pageable,order); return studentPage.map(s -> studentTransform.toDto(s)); }
可能是什么问题?
解决方法
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。