gpt4 book ai didi

spring - 在可分页资源上生成自链接时出错

转载 作者:行者123 更新时间:2023-12-02 23:03:33 25 4
gpt4 key购买 nike

制作一个简单的 RestController

@RestController
public class Controloler
@Value
class MyData {
int value;
}

@GetMapping(value = "/datas", produces = MediaTypes.HAL_JSON_VALUE)
public PagedResources<Resource<MyData>> getMyData(PagedResourcesAssembler<MyData> assembler,
@RequestParam(required = false) String param,
@PageableDefault Pageable pageRequest)
{
MyData data = new MyData(1);
Page<MyData> page = new PageImpl<>(Collections.singletonList(data), pageRequest, 100);
Link selfLink = linkTo(methodOn(Controloler.class).getMyData(assembler, param, pageRequest)).withSelfRel();
return assembler.toResource(page, selfLink);
}

}

当我尝试获取页面curl“http://localhost:8080/datas?param=12&page=2”时,自链接生成出现问题

{
"_embedded": {
"myDataList": [
{
"value": 1
}
]
},
"_links": {
"first": {
"href": "http://localhost:8080/datas?param=12&page=0&size=10"
},
"prev": {
"href": "http://localhost:8080/datas?param=12&page=1&size=10"
},
"self": {
"href": "http://localhost:8080/datas?param=12"
},
"next": {
"href": "http://localhost:8080/datas?param=12&page=3&size=10"
},
"last": {
"href": "http://localhost:8080/datas?param=12&page=9&size=10"
}
},
"page": {
"size": 10,
"totalElements": 100,
"totalPages": 10,
"number": 2
}
}

在我看来,自链接应该是http://localhost:8080/datas?param=12&page=2&size=10

现在我可以解决这个问题,而无需在参数中使用可分页,只需精确的参数页面和大小。但是,我希望有一些可分页的解决方案

我已经看到,在 spring-data-rest 的情况下,自身有一种模板类型。但我想获取我请求的网址

最佳答案

In my opinion, self link should be http://localhost:8080/datas?param=12&page=2&size=10.

我同意。事实上,这似乎是一个错误。最新版本的 PagedResourcesAssembler 的做法有所不同:

Link selfLink = link.map(it -> it.withSelfRel())//
.orElseGet(() -> createLink(base, page.getPageable(), Link.REL_SELF));

( source )

该类的错误版本正在执行以下操作:

resources.add(createLink(base, null, Link.REL_SELF));

createLink 方法永远不会传递所需的 Pageable,而是将 null 作为第二个参数传递。

因此,如果您无法升级到最新版本,您仍然可以解决这个问题:

Link selfLink = linkTo(methodOn(Controloler.class).getMyData(assembler, param, pageRequest)).withSelfRel();
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(selfLink.expand().getHref());
new HateoasPageableHandlerMethodArgumentResolver().enhance(builder, null, pageRequest);
Link newSelfLink = new Link(builder.build().toString());

关于spring - 在可分页资源上生成自链接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44175562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com