Я пытаюсь документировать метод, который возвращает список владельцев, используя документы весеннего отдыха, но я не знаю, как документировать ссылки, предоставленные Hateoas.
linkWithRel(...) не работает с объектом _embedded.ownerDtoList.
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OwnerDto extends RepresentationModel<OwnerDto> {
@Null
private UUID id;
@NotBlank
@Size(min = 3, max = 20)
private String name;
}
@GetMapping(value = "")
public ResponseEntity<CollectionModel<OwnerDto>> getOwners() {
List<OwnerDto> owners = ownerService.findAllOwners();
HttpHeaders headers = new HttpHeaders();
headers.add("X-Owners-Total", Integer.toString(owners.size()));
owners.stream().map(owner -> owner
.add(linkTo(OwnerController.class).slash(owner.getId()).withSelfRel())
.add(linkTo(OwnerController.class).withRel("owners")))
.collect(Collectors.toList());
Link mainSelfLink = linkTo(OwnerController.class).withSelfRel();
return new ResponseEntity<>(
new CollectionModel<>(owners, mainSelfLink),
headers,
HttpStatus.OK
);
}
public void findAllOwners() throws Exception {
List<OwnerDto> ownerDtoList = Arrays.asList(ownerDto_1, ownerDto_2);
Mockito.when(ownerService.findAllOwners()).thenReturn(ownerDtoList);
mockMvc.perform(get("/api/v1/owner")
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$._embedded.ownerDtoList[0].id", is(ownerDto_1.getId().toString())))
.andExpect(jsonPath("$._embedded.ownerDtoList[0].name", is(ownerDto_1.getName())))
.andExpect(jsonPath("$._embedded.ownerDtoList[1].id", is(ownerDto_2.getId().toString())))
.andExpect(jsonPath("$._embedded.ownerDtoList[1].name", is(ownerDto_2.getName())))
.andExpect(header().longValue("X-Owners-Total", 2L))
.andDo(document("v1/{method-name}", ownerPageHeadersSnippet(), ownerCollectionResponseFieldsSnippet(),
links(
halLinks(),
linkWithRel("owners").description("Get all owners <<Resource>>"),
linkWithRel("self").description("Self <<Resource>>")
)
));
}
{
"_embedded": {
"ownerDtoList": [
{
"id": "9eccbed8-6184-470c-b635-7d7bd4196caf",
"name": "Szymaa",
"_links": {
"self": {
"href": "http://localhost:8088/api/v1/owner/9eccbed8-6184-470c-b635-7d7bd4196caf"
},
"owners": {
"href": "http://localhost:8088/api/v1/owner"
}
}
},
{
"id": "f0edf088-d1ff-49dc-9561-e65ab0dcd645",
"name": "dsad23",
"_links": {
"self": {
"href": "http://localhost:8088/api/v1/owner/f0edf088-d1ff-49dc-9561-e65ab0dcd645"
},
"owners": {
"href": "http://localhost:8088/api/v1/owner"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8088/api/v1/owner"
}
}
}
org.springframework.restdocs.snippet.SnippetException: В ответе не найдены ссылки со следующими отношениями: [владельцы]