gpt4 book ai didi

java - 使用 Spring Data Core 中的 PagedResourcesAssembler 进行 HATEOAS 链接生成

转载 作者:行者123 更新时间:2023-12-02 12:24:21 24 4
gpt4 key购买 nike

在 Spring Data JPA documentation它解释了如何使用 PagedResourcesAssembler 生成链接。该文档引用了 toResources() 方法,但据我所知该方法不存在。我已成功生成资源集合的链接,但我不知道如何生成子资源的链接。

这是我的 Controller :

public HttpEntity<PagedResources<Party>> search(@RequestBody PartySearchRequest request,
Pageable pageable, PagedResourcesAssembler<Party> assembler ) {

Map<String,String> searchFilters = RequestValidator.validateContractSearchFilters(request);

Page<Party> parties = repository.findByFirstNameOrLastName(searchFilters.get("firstName"), searchFilters.get("lastName"), pageable);

return new ResponseEntity(assembler.toResource(parties), HttpStatus.OK);

}

这会生成以下 JSON:

{
"_embedded": {
"partyList": [
{
"firstNm": "John",
"lastNm": "Doe",
},
{
"firstNm": "Bob",
"lastNm": "Smith",
}
],
}
]
},
"_links": {
"first": {
"href": "http://localhost:8080/v1/party/search?page=0&size=2"
},
"self": {
"href": "http://localhost:8080/v1/party/search?page=0&size=2"
},
"next": {
"href": "http://localhost:8080/v1/party/search?page=1&size=2"
},
"last": {
"href": "http://localhost:8080/v1/party/search?page=7&size=2"
}
},
"page": {
"size": 2,
"totalElements": 16,
"totalPages": 8,
"number": 0
}
}

正如您所看到的,我获得了整个当事人搜索的链接,但没有获得单个当事人对象的链接。 (我认为我的问题与这个问题类似: How to add HATEOAS links in a sub resource )但我不太确定,所以我发布了自己的问题。

任何帮助将不胜感激!谢谢!

最佳答案

您需要对扩展 ResourceAssemblerSupport 的类的引用。

这应该可行,将 myResourceAssembler 更改为您的类:

在你的 Controller 中:

private final MyResourceAssembler myResourceAssembler;

public MyController(MyResourceAssembler myResourceAssembler) {
this.myResourceAssembler = myResourceAssembler;
}

public HttpEntity<PagedResources<Party>> search(@RequestBody PartySearchRequest request,
Pageable pageable, PagedResourcesAssembler<Party> assembler ) {

Map<String,String> searchFilters = RequestValidator.validateContractSearchFilters(request);

Page<Party> parties = repository.findByFirstNameOrLastName(searchFilters.get("firstName"), searchFilters.get("lastName"), pageable);

Link selfLink = linkTo(methodOn(this.getClass().view(pageable, null)).withSelfRel();

return new ResponseEntity(assembler.toResource(parties, myResourceAssembler, selfLink), HttpStatus.OK);

}

而且,如果您不想要 selfLink:

return new ResponseEntity(assembler.toResource(parties, myResourceAssembler), HttpStatus.OK);

引用文献

关于java - 使用 Spring Data Core 中的 PagedResourcesAssembler 进行 HATEOAS 链接生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45553266/

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