当前位置: 首页 > 知识库问答 >
问题:

我应该如何将一个未分页但已排序的可分页文件传递到Spring JPA存储库?

魏兴邦
2023-03-14
Page<EventTriggerVersion> findByProjectIdAndEventTriggerId(
    @Param("projectId") UUID projectId, @Param("eventTriggerId") UUID eventTriggerId, Pageable pageable);

那么您就不能为它创建一个只进行排序但不进行分页的可分页,即只返回一个包含所有结果的页面。

但是,您也不能只给它一个未分页的可分页参数和一个排序参数,如果这样做,它会抛出这个异常:java.lang.IllegalStateException:方法必须不具有可分页的*AND*Sort参数。改用可分页的排序功能!

那么,我应该如何做到这一点,而不重复我的所有存储库方法(其中大多数具有自定义查询),以获得一个具有可分页和排序的版本呢?

我们的用户只是希望在请求中传递size=0,然后获取所有数据(不限于某个任意的最大值,而是一个真正的未分页请求)。这已经够烦人的了,因为这意味着我需要从控制器中移除可分页的请求param,并从page、size和Sort手动构造它,但现在在没有严重代码重复的情况下甚至看起来都不可能。

共有1个答案

李烨
2023-03-14

现在,我实现了自己的可分页类,如下所示:

import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

public class SortedUnpaged implements Pageable {

    private final Sort sort;

    private SortedUnpaged(Sort sort) {
        this.sort = sort;
    }

    public static SortedUnpaged getInstance(Sort sort) {
        return new SortedUnpaged(sort);
    }

    public boolean isPaged() {
        return false;
    }

    public Pageable previousOrFirst() {
        return this;
    }

    public Pageable next() {
        return this;
    }

    public boolean hasPrevious() {
        return false;
    }

    public Sort getSort() {
        return sort;
    }

    public int getPageSize() {
        throw new UnsupportedOperationException();
    }

    public int getPageNumber() {
        throw new UnsupportedOperationException();
    }

    public long getOffset() {
        throw new UnsupportedOperationException();
    }

    public Pageable first() {
        return this;
    }
}

并在我的控制器中包含以下内容:

@GetMapping("/{projectId}" + SUBJECTS_PATH)
public ResponseEntity<SubjectWrapperDTO> getSubjects(
    @RequestParam(name = "size", required = false, defaultValue = "20") Integer size,
    @RequestParam(name = "page", required = false, defaultValue = "0") Integer page,
    @SortDefault(sort = "name") Sort sort) {

    Pageable pageable;
    if (size > 0) {
        pageable = PageRequest.of(page, size, sort);
    }
    else {
        pageable = SortedUnpaged.getInstance(sort);
    }
    ...

}

但是对于这样一个基本的需求来说,这似乎有点太多了,我不想实现我自己的Spring接口类。

 类似资料:
  • 我的问题是我的代码对结果区分大小写。 下面是我的代码: 我的问题是:如何对它进行不区分大小写的排序?

  • 我已经实现了一个小用例来评估Spring Data Neo4j。我有一个接口,它扩展了GraphRepository。 界面是这样的: 这给了我错误< code >“类型PublicRepository的层次结构不一致”。 这种类型的错误是因为当前类扩展/实现的类/接口之一不存在,而当前类又在扩展/实现另一个类/接口。 查看核心库的包我发现库中没有扩展为CRUDRepository的接口。我在Ne

  • 我想在我的文档中添加分页链接。 是保存内容和可分页对象的Page对象。 问题是。它创建“sort=title:asc”。但我需要“sort=title,asc”的格式,如Spring数据文档本章所述。我假设有比自己构建所需字符串更好的方法。我认为这是一个普遍的问题。 创建可用的排序参数字符串的最佳方法是什么? 我不需要像这里所示的静态行为 Spring5 百里香3

  • 我有一个来自firebase的uid,但它是这样存储的: checkout.js 存储我需要传递到另一个页面的uid。这个uid存储在中,我需要将它放到中才能在那里使用uid。我该怎么做?如果需要更多代码,请让我知道。我正在使用react/js

  • 有时,客户端希望 RESTful Web API 提供经过排序后的字段,比如,按照年龄从大到小排列学生;有时,根据客户端条件,需要返回给前端的数据过多,如果一次提供,会大大降低响应速度。此时,可将数据做分割,分成不同的小份,发送给客户端。这一节,我们为大家介绍 RESTful Web API 如何实现数据的排序与分页。 1.排序的使用 在类视图中设置 filter_backends,使用rest_

  • 我希望通过查看https://www.dariawan.com/tutorials/Spring/documenting-spring-boot-rest-api-springdoc-openapi-3和https://techsparx.com/software-development/OpenAPI/spring-boot-rest-api-docs.html来开发Spring Boot+Op