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é 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). P> illustrer davantage mon problème / question: p> Maintenant, je voudrais voir quelque chose comme ceci: p> Pendant que j'obtiens ceci: p> Voir aussi: http://docs.spring.io/spring-Data/REST/docs/current/reference/html/#projections-excerPTS p> 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). P> p> @projection code>, mais je me suis retrouvé coincé à nouveau.
3 Réponses :
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 P>
Merci Fahad, mais pouvez-vous s'il vous plaît illustrer ce que vous voulez dire? Voulez-vous dire un @Controller code> et un
@Resource code> 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 code> 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.
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: A alternativement, si vous n'avez pas besoin d'exposer le 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. p> p> Obtenez des gens / 1? Projection = PersonProjection Code> va toujours rendre
_links éléments code>, mais vous obtiendrez la nidification souhaitée: p>
Société CODE> et
Adresse CODE> Entités comme ressources de repos, vous pouvez marquer leurs référentiels avec
@RepositoressResource (exporté = false) code>, et ils seront inlinés partout où ils sont référencés , sans aucun besoin de projections. P>
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?
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 P> comme indiqué sur Données de printemps avec type MySQL JSON p> Nous avons une chose similaire dans les données de printemps Dynamodb - pour AWS Dynamodb P> P>
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