如何在 spring-data-rest 中使用 Pageable 作为 get-query 参数?
How to use Pageable as get-query parameter in spring-data-rest?
我有一个简单的查询控制器,它接受查询参数(如 Person
dto)和一个 Pageable
:
@RestController
public class PersonController {
@GetMapping("/persons")
public Object search(org.springframework.data.domain.Pageable pageable, Person form) {
repository.findAll(form, pageable);
}
}
pageable 可以同时使用 sort
和 page
参数,如下所示:
http://localhost:8080/persons?sort=age,desc&page=5
问题:对于排序,我想添加顺序提示,例如 NULLS_LAST
或 NULLS_FIRST
。
问题:如何使用查询参数实现此目的?
尝试做类似的事情:
pageable.getSort().and(Sort.by(new Sort.Order(Sort.Direction.DESC, "age", Sort.NullHandling.NULLS_LAST)));
您可以像这样修改 Pageable
对象(例如放入控制器的方法)。这是一个只有一个排序字段的示例,但您可以在所有字段上循环并以相同的方式修改 nullsLast/nullsFirst
。请尝试:
private Pageable customSort(Pageable pageable) {
Sort sort = pageable.getSort();
Order order = sort.iterator().next();
List<Order> orders = new ArrayList<>();
// nullsFirst or nullsLast
orders.add(new Order(order.getDirection(),order.getProperty()).nullsFirst());
return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(orders));
}
我有一个简单的查询控制器,它接受查询参数(如 Person
dto)和一个 Pageable
:
@RestController
public class PersonController {
@GetMapping("/persons")
public Object search(org.springframework.data.domain.Pageable pageable, Person form) {
repository.findAll(form, pageable);
}
}
pageable 可以同时使用 sort
和 page
参数,如下所示:
http://localhost:8080/persons?sort=age,desc&page=5
问题:对于排序,我想添加顺序提示,例如 NULLS_LAST
或 NULLS_FIRST
。
问题:如何使用查询参数实现此目的?
尝试做类似的事情:
pageable.getSort().and(Sort.by(new Sort.Order(Sort.Direction.DESC, "age", Sort.NullHandling.NULLS_LAST)));
您可以像这样修改 Pageable
对象(例如放入控制器的方法)。这是一个只有一个排序字段的示例,但您可以在所有字段上循环并以相同的方式修改 nullsLast/nullsFirst
。请尝试:
private Pageable customSort(Pageable pageable) {
Sort sort = pageable.getSort();
Order order = sort.iterator().next();
List<Order> orders = new ArrayList<>();
// nullsFirst or nullsLast
orders.add(new Order(order.getDirection(),order.getProperty()).nullsFirst());
return PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by(orders));
}