Spring Boot:使用 Pageable 作为请求参数的 @GetMapping 无法按预期工作

问题描述 投票:0回答:2

我正在使用 Spring Boot 2,并且我在

@RestController
中编写了
@GetMapping
,并以
Pageable
作为参数。

@GetMapping
public ResponseEntity<Page<AppointmentTO>> findAll(Pageable pageable) {
    Page<AppointmentTO> page = appointmentService.findAll(pageable);
    return ResponseEntity.ok(page);
}

问题如下:

通过每个请求,查询参数

pageSize
offset
在到达Spring Boot后端时总是重置为默认值(
?offset=0&pageSize=20
),但是我在请求的url中发送不同的参数(
?offset=15&pageSize=5
例如)。

java spring rest spring-boot spring-data-jpa
2个回答
7
投票

Spring Boot 将请求参数映射到扩展

org.springframework.data.domain.PageRequest
AbstractPageRequest

  AbstractPageRequest implements Pageable, Serializable {
    ...
    private final int page;
    private final int size;

    public long getOffset() {
        return (long)this.page * (long)this.size;
    }
    ...

您应该使用以下网址:

http://localhost:8080?page=3&size=5

您还可以添加排序...&sort=name


0
投票

Spring boot

Pageable
支持以下 url 参数 OOTB:

  • page:页码,其中0为第一页
  • 尺寸:页面尺寸
  • 排序:按字段排序
  • 方向:ASC/DESC

示例端点:

@GetMapping
public ResponseEntity<?> getUsers(Pageable pageable) {
    try {
        return ResponseEntity.status(HttpStatus.OK).body(userService.getUsers(pageable));
    } catch (Exception e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
    }
}

样品请求:

localhost:8080/users?page=2&size=5&sort=createdAt,DESC

示例响应(注意下面的寻呼数据):

{
    "content": [
       ... 
    ],
    "pageable": {
        "sort": {
            "empty": false,
            "sorted": true,
            "unsorted": false
        },
        "offset": 10,
        "pageNumber": 2,
        "pageSize": 5,
        "paged": true,
        "unpaged": false
    },
    "last": false,
    "totalPages": 12,
    "totalElements": 58,
    "size": 5,
    "number": 2,
    "sort": {
        "empty": false,
        "sorted": true,
        "unsorted": false
    },
    "numberOfElements": 5,
    "first": false,
    "empty": false
}
© www.soinside.com 2019 - 2024. All rights reserved.