Возможно, это идет вразрез с принципами REST / HAL, но я подумал, что если я просматривал список элементов, они не должны содержаться в теге _embedded
.Ниже приведены подробности, возвращаемые при переходе к /characters
в моем приложении для весенней загрузки.
Я ожидал, что _embedded
не будет присутствовать для characterDescriptions
, так как они находятся в центре внимания страницы, возможно ли достичь этого?Должен ли я попытаться достичь этого или _embedded
будет нормой здесь?
В связанной заметке, когда я перехожу к определенному ресурсу, используя ссылку (например, characters/1
), я должен ссылаться на родительскую страницу /characters
или допустимо содержать толькоссылка на конечные точки такого типа (в конечном итоге я буду ссылаться на пользователя здесь, но это общий вопрос о конечных точках REST)
Метод контроллера, который возвращает этот JSON, находится ниже JSON
{
"_embedded": {
"characterDescriptions": [
{
"characterName": "Adrak",
"playerName": "Liam",
"userName": "liam",
"_links": {
"self": {
"href": "http://localhost:8080/characters/1"
}
}
},
{
"characterName": "Thorny",
"playerName": "Aedo",
"userName": "aedo",
"_links": {
"self": {
"href": "http://localhost:8080/characters/2"
}
}
},
{
"characterName": "Anin",
"playerName": "Saoirse",
"userName": "saoirse",
"_links": {
"self": {
"href": "http://localhost:8080/characters/3"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/characters"
}
}
}
Вот соответствующий метод
@GetMapping
public ResponseEntity<Resources<Resource<CharacterDescription>>> getAllCharacterDescriptions( ) {
List <Resource<CharacterDescription>> characters = repository.findAll()
.stream().map( character -> {
Link characterLink = linkTo(methodOn(CharacterDescriptionController.class)
.getCharacterDescription(character.getCharacterId()))
.withSelfRel();
return new Resource<>(character, characterLink);
}).collect(Collectors.toList());
Link allCharacterLink = linkTo(methodOn(CharacterDescriptionController.class)
.getAllCharacterDescriptions(auth))
.withSelfRel();
Resources<Resource<CharacterDescription>> resources = new Resources<>(characters, allCharacterLink);
return ResponseEntity.ok(resources);
}