【问题标题】:How to use Pageable as get-query parameter in spring-data-rest?如何在 spring-data-rest 中使用 Pageable 作为 get-query 参数?
【发布时间】:2019-09-10 14:36:02
【问题描述】:

我有一个简单的查询控制器,它接受查询参数(如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 可以同时采用sortpage 参数,如下所示:

http://localhost:8080/persons?sort=age,desc&page=5

问题:对于排序,我想添加订单提示,例如 NULLS_LASTNULLS_FIRST

问题:如何使用查询参数来实现这一点?

【问题讨论】:

  • 在 application.properties 中有一个属性:spring.jpa.properties.hibernate.order_by.default_null_ordering=last/first。但您可能想动态应用它吗?
  • 这个的默认值是多少?但实际上我想为每个属性动态应用这个(一些属性我想默认排序 nulls_last,还有一些 nulls_first)。
  • 默认为无。我会尽力为您提供解决方案。

标签: java spring spring-mvc spring-data-rest


【解决方案1】:

您可以像这样修改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));
}

【讨论】:

  • 因此,由于没有仅限前端的解决方案,因此效果很好!
【解决方案2】:

尝试做类似的事情:

pageable.getSort().and(Sort.by(new Sort.Order(Sort.Direction.DESC, "age", Sort.NullHandling.NULLS_LAST)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2016-09-11
    • 2019-02-08
    • 1970-01-01
    • 2014-04-03
    • 2017-06-23
    • 2015-10-17
    相关资源
    最近更新 更多