2015-10-15 2 views
1

J'ai une base de données et quelques classes. Ces classes sont liées à OneToMany, et ainsi de suite.Spring Boot REST Ressource ne montrant pas les objets liés (ensembles)

Si j'imprime l'objet lui-même avec le ressort, il contient tout. Mais si je l'imprime avec la fonction Ressource, elle ne contient que les variables, qui ne sont pas des collections ou liées autrement avec une autre classe.

Comment puis-je ajouter les collections à la sortie?

+0

Utilisez-vous Spring Data REST? Regardez dans les projections si oui. –

+0

J'utilise Spring Data REST. Que voulez-vous dire par "projections"? – rala

Répondre

1

Par défaut, Spring Data REST n'affiche pas les ressources associées sauf en tant que liens. Si vous voulez que vous deviez définir des projections qui décrivent les champs que vous voulez voir, qu'il s'agisse de champs simples comme ceux que vous décrivez ou de ressources associées. Voir

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts

Par exemple que vous avez une ressource Service avec des associations aux ressources comme serviceType, serviceGroup, owner, serviceInstances et docLinks. Si vous voulez qu'elles apparaissent dans le corps de réponse, vous pouvez créer une projection:

package my.app.entity.projection; 

import org.springframework.data.rest.core.config.Projection; 
... 

@Projection(name = "serviceDetails", types = Service.class) 
public interface ServiceDetails { 
    String getKey(); 
    String getName(); 
    ServiceType getType(); 
    ServiceGroup getGroup(); 
    Person getOwner(); 
    List<ServiceInstance> getServiceInstances();  
    List<DocLink> getDocLinks(); 
    String getPlatform(); 
} 

obtenez alors votre URL avec la projection:

http://localhost:8080/api/services/15?projection=serviceDetails 

Le résultat comprendra les propriétés projetées:

{ 
    "name" : "MegaphoneService", 
    "key" : "megaphone", 
    "type" : { 
    "key" : "application", 
    "name" : "User Application", 
    "description" : "A service that allows users to use a megaphone." 
    }, 
    "owner" : null, 
    "serviceInstances" : [ { 
    "key" : "megaphone-a-dr", 
    "description" : null, 
    "loadBalanced" : true, 
    "minCapacityDeploy" : null, 
    "minCapacityOps" : 50 
    }, ... ], 
    ... 
} 
+0

est-ce vraiment la seule solution? Je veux dire que j'ai des classes pour toutes les entrées de la base de données et maintenant je dois faire des interfaces aussi? – rala

+1

Seulement dans les cas où vous avez réellement besoin des données inline. C'est différent d'e.g. JPA/Hibernate où vous pouvez avoir un chargement paresseux, car avec une réponse HTTP vous n'allez pas avoir de proxy là pour charger paresseux. Si SDR devait par défaut afficher toutes les ressources associées qui mèneraient à des réponses volumineuses (avec les jointures/charges utiles correspondantes) dans de nombreux contextes où les liens sont suffisants. Ainsi, SDR renvoie tout ce qu'il peut sans se joindre, mais offre la possibilité de se joindre si nécessaire. –

+0

J'utilise 'Pageable' dans d'autres cas et là il me montre le contenu par défaut. Tout moyen de le faire avec ça? – rala