Comment faire pour supprimer le “_embedded” propriété au Printemps HATEOAS
Je suis en utilisant le Printemps de Démarrage et HATEOAS de construire une API REST et quand mon API renvoie une collection, il est enveloppé à l'intérieur d'un "_embedded" des biens, comme suit:
{
"_links":{
"self":{
"href":"http://localhost:8080/technologies"
}
},
"_embedded":{
"technologies":[
{
"id":1,
"description":"A",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/1"
}
}
},
{
"id":2,
"description":"B",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/2"
}
}
}
]
}
}
Je veux la réponse à être comme ceci:
{
"_links":{
"self":{
"href":"http://localhost:8080/technologies"
}
},
"technologies":[
{
"id":1,
"description":"A",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/1"
}
}
},
{
"id":2,
"description":"B",
"_links":{
"self":{
"href":"http://localhost:8080/technologies/2"
}
}
}
]
}
Mon TechnologiesController:
@RestController
@ExposesResourceFor(Technology.class)
@RequestMapping(value = "/technologies")
public class TechnologiesController {
...
@ResquestMapping(method = RequestMethod.GET, produces = "application/vnd.xpto-technologies.text+json")
public Resources<Resource<Technology>> getAllTechnologies() {
List<Technology> technologies = technologyGateway.getAllTechnologies();
Resources<<Resource<Technology>> resources = new Resources<Resource<Technology>>(technologyResourceAssembler.toResources(technologies));
resources.add(linkTo(methodOn(TechnologiesController.class).getAllTechnologies()).withSelfRel());
return resources;
}
La configuration de la classe a l'annotation @EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL).
Quelle est la meilleure façon de produire la réponse sans le "_embedded"?
Si vous supprimez
HAL projet dit "réservé "_embedded" la propriété est FACULTATIVE"
Elle est facultative en ce qu'une ressource n'a pas besoin de ressources intégrées. Cependant, si c'est le cas, ils doivent être sous
Je vais avoir le même problème. J'ai une projection sur un objet, et je suis de la limiter à seulement afficher le nom. Le problème, c'est qu'il y a plus de 20 relations, de sorte que le _embedded objet est énorme. Je n'ai pas trouvé un bon moyen de surmonter ce soit.
_embedded
de la réponse la réponse ne sera plus valide HAL. Vous avez besoin de coller avec _embedded
ou d'utiliser un autre type de média.HAL projet dit "réservé "_embedded" la propriété est FACULTATIVE"
Elle est facultative en ce qu'une ressource n'a pas besoin de ressources intégrées. Cependant, si c'est le cas, ils doivent être sous
_embedded
.Je vais avoir le même problème. J'ai une projection sur un objet, et je suis de la limiter à seulement afficher le nom. Le problème, c'est qu'il y a plus de 20 relations, de sorte que le _embedded objet est énorme. Je n'ai pas trouvé un bon moyen de surmonter ce soit.
OriginalL'auteur jose_p | 2015-03-02
Vous devez vous connecter pour publier un commentaire.
Comme le la documentation dit
Afin d'omettre
_embedded
en vous la réponse que vous aurez besoin d'ajouterà
application.properties
.OriginalL'auteur Kamill Sokol
L'ajout de cette
Accept
en-tête de la demande:406
avec le message: "impossible de trouver représentation acceptable"OriginalL'auteur Jumbo N. Dejcharoen
J'près de HAL, car il est difficile à l'aide de Ressources/Ressources par restTemplate. - Je désactiver cette fonctionnalité par le code suivant:
Fonctionner pour moi. HAL est bon si il y a plus de soutien avec restTemplate.
OriginalL'auteur shenyu1997
Sapin de ceux qui, à l'aide de Données du Printemps, et le considérer comme un problème - solution est de mettre en
en apllication des propriétés. Il faudra encore des liens, mais pas de _embedded plus.
OriginalL'auteur Stepan Mozyra