我正在使用Spring和Spring存储库构建其余的微服务。我想让客户端控制分页和排序(使用spring-data-rest)。
public PagedResources<TestDto> find(
@PageableDefault(page = 0, size = 50) final Pageable pageable,
final PagedResourcesAssembler<Test> assembler) {
final Page<Test> pagedResults = testRepository.findAll(pageable);
return assembler.toResource(pagedResults, testResourceAssembler);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码很好用,但是我不满意排序是耦合到我的dao层而不是dto层。例:
http://localhost:8080/my-service/test?size=100&page=0&sort=statusCode,asc
Run Code Online (Sandbox Code Playgroud)
json响应(DTO):
{
"links": [
...
...
],
"content": [
{
"id": 4
"status": "OK"
"links": []
}
],
"page": {
"size": 100,
"totalElements": 1,
"totalPages": 1,
"number": 0
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,请求url中的“ statusCode”排序与响应dto中相应的“ status”之间的区别。从客户的角度来看,这是不合逻辑的。现在,我还公开了该服务的一些内部信息。我无法更改服务的实现,因为它可以由客户端使用,并且在更改名称后会破坏旧的请求。
当我添加一个自定义映射以处理searchrequest中的状态码与状态的差异时:
private PageRequest getPageRequest(final Pageable pageable) {
final List<Order> newOrder = new ArrayList<>();
for (final Order order : pageable.getSort()) …Run Code Online (Sandbox Code Playgroud)