2017-07-06 1 views
0

J'utilise Spring Data Rest avec Spring Boot et j'ai une situation quelque peu étrange.Affichage des liens de relation pour @RestResource (exporté = false)

  • Nous avons besoin nos clients pour être en mesure d'afficher une ressource avec toutes ses relations dans un objet JSON, donc nous avons fait les relations que @RestResource(exported = false), ce fut la seule solution que nous pourrions trouver, le hic est que nous perdons la liens

  • nous essayons maintenant de créer une projection de cette ressource avec toutes ses relations affichées sous forme de liens

ce que nous avons essayé jusqu'à présent est de créer une projection avec la non-relation attributs ajoutés avec getXXX(), puis utiliser un pour gérer les liens comme dans this question, mais nous ne pouvons pas sembler le faire fonctionner

Q: est-ce la meilleure façon d'aborder cela? Comment pouvons-nous ajouter des liens à des projections comme des ressources normales?

MISE À JOUR Voici donc ma classe de projection

@Projection(name = "fullSP", types = {SP.class}) 
public interface FullSP {} 

et ceci est mon processeur

@Component 
public class FullSPResourceProcessor implements ResourceProcessor<Resource<FullSP>> { 

private final EntityLinks entityLinks; 

@Autowired 
public FullSPResourceProcessor(EntityLinks entityLinks) { 
    this.entityLinks = entityLinks; 
} 

@Override 
public Resource<FullSP> process(Resource<FullSP> fullSPResource) { 
    FullSP fullSP= fullSPResource.getId(); 
    fullSPResource.add(entityLinks.linkFor(Rate.class).withRel("rates")); 
    return fullSPResource; 
} 
} 

mais cela ne fonctionne pas, cela ajoute juste un lien vers/taux en ressource non sous-ressource

+0

un code aiderait - en particulier la projection et le processeur - peut-être aussi l'entité –

+1

@MathiasDpunkt mis à jour ma question – engma

Répondre

0

EntityLinks n'a aucune connaissance du lien de sous-ressource que vous voulez générer. lien de premier niveau par défaut.

Je suppose que vous n'avez pas de contrôleur personnalisé pour cette sous-ressource ?! Si vous ne faites pas ressort-données-repos n'expose pas une sous-ressource dans ce cas - parce que la cible de la relation n'est pas exported.

Dans ce cas, vous auriez besoin d'un contrôleur personnalisé pour exposer cette sous-ressource. Si vous suivez cette route, vous devez utiliser ControllerLinkBuilder pour créer ce lien. Si vous voulez coller avec EntityLinks vous pouvez effectuer les opérations suivantes (pour le lien que vous devez l'id - pour l'obtenir, il doit être disponible sur la projection):

fullSPResource.add(entityLinks.linkForSingleResource(SP.class, fullSPResource.getContent().getId()).slash("rates).withRel("rates")); 
+0

Je vais donner un coup de feu, je vais essayer la solution du contrôleur d'abord – engma