10
votes

Données de printemps Rest Comment ajouter des ressources incorporées en ligne

J'utilise le repos de données de printemps et les haïssés en combinaison avec le navigateur HAL. Cela fonctionne parfaitement, mais je souhaite maintenant faire une vidage JSON d'une entité spécifique avec (un ensemble de) objets associés. J'ai utilisé @projection , mais je me suis retrouvé coincé à nouveau.

FYI: le comportement normal (avec embarqué et des liens, etc.) doit rester en plus du nouveau point d'extrémité (sans embarquer et des liens).

illustrer davantage mon problème / question: xxx

Maintenant, je voudrais voir quelque chose comme ceci: xxx

Pendant que j'obtiens ceci: xxx

Voir aussi: http://docs.spring.io/spring-Data/REST/docs/current/reference/html/#projections-excerPTS

Dans mon exemple, j'ai introduit deux difficultés que j'ai: listes (entreprises) et multiples niveaux: personne-> société-> adresse. Les deux sont tenus de travailler (probablement 5 niveaux, dont certains ont «de nombreuses» relations).


3 commentaires

Vous pouvez en n'utiliser pas de repos de données de printemps. Le repos de données de printemps prend une vue opinionnée sur la façon de se reposer à droite, ce qui comprend des liens pour les relations au lieu de la pleine entité.


Merci Deinum. Le repos de données de printemps est sur la classe de classe et doit rester là. Votre commentaire est-il toujours applicable alors?


Autres moyens d'intégrer des valeurs d'objets liés: Stackoverflow.com/a/52217253/2248405


3 Réponses :


0
votes

Dans le deuxième point final, si vous ne voulez pas de liens, vous devez avoir un contrôleur et une ressource, où vous mappez les données vers la ressource et renvoyez la collecte de ressources du contrôleur


3 commentaires

Merci Fahad, mais pouvez-vous s'il vous plaît illustrer ce que vous voulez dire? Voulez-vous dire un @Controller et un @Resource ou plus en général? Comment cette cartographie des données fonctionne-t-elle dans votre vue?


Par ressource, je veux dire, une classe similaire à l'entité avec les informations souhaitées. Vous pouvez vous faire du mappeuse de haricot de Dozer pour mapper les données sur la ressource.


Il peut alors être problématique lorsque les relations signalent également l'inverse de l'autre sens (de l'adresse à la société et de l'entreprise à la personne. L'approche non-Spring-Data-Repose montrera tout (infinie boucle récursive). @jsonignore Ce n'est pas une option dans ce cas, car alors la vue Hatoas rendra mal. Je n'ai pas encore testé cela, mais cela me semble logique.



16
votes

La méthode acceptée d'entités d'inlinisation est des projections, comme vous l'avez identifié. Les projections sont toujours inlinées, une option est donc de créer des projections pour chacune de vos entités et de les combiner comme: xxx

A Obtenez des gens / 1? Projection = PersonProjection va toujours rendre _links éléments , mais vous obtiendrez la nidification souhaitée: xxx

alternativement, si vous n'avez pas besoin d'exposer le Société et Adresse Entités comme ressources de repos, vous pouvez marquer leurs référentiels avec @RepositoressResource (exporté = false) , et ils seront inlinés partout où ils sont référencés , sans aucun besoin de projections.

Une mise en garde finale, cependant - cette demande est quelque peu combattue contre l'éthique du repos de données de printemps et de la hateoas de printemps et d'inviter de grandes requêtes difficiles à manifester le problème N + 1. N'oubliez pas que le repos de données de printemps n'est pas une solution clé en main pour transformer un modèle de domaine en une API et rendu des graphiques d'objet profond (si c'est votre intention) est potentiellement quelque chose que vous pourriez exposer en tant que point d'extrémité de contrôleur personnalisé sur une base ad-hoc où vous peut contrôler les conditions soigneusement.


1 commentaires

Y a-t-il un moyen de configurer ou de remplacer certains haricots de printemps pour l'obtenir en ligne toutes les relations impatientes, comme celle-ci. Sans utiliser les projections maladroites et auront exporté le repos pour les entités imbriquées?



-1
votes

Je crois que le meilleur moyen d'intégrer une liste ou un hashmap est via la convertie en une chaîne JSON et de retour à l'objet Java lorsque vous le lisez ...

Ceci peut être facilement effectué en utilisant xxx

comme indiqué sur Données de printemps avec type MySQL JSON

Nous avons une chose similaire dans les données de printemps Dynamodb - pour AWS Dynamodb


0 commentaires