0
votes

Comment mapper un DTO vers plusieurs entités?

J'écris une application de printemps, qui a deux entités liées par une autre relation, permet de les appeler mère et enfant.

Quand je crée une entité mère via la demande postale, je veux une entité enfant être créé automatiquement. En utilisant les annotations @Enetomany et @manytoOne, cela fonctionne bien. Au moins, tant que je fournisse les informations sur les enfants au sein de la mères d'entretien. P>

voici mon code strong> p>

mère.java p>

{
   "mother": {
       "name":"Susanne"
   },
   "kid": {
       "name":"Peter"
   }
}


4 commentaires

Vous pouvez avoir une interface mère et enfant d'une interface, puis créer un constructeur tructo (Personne P) ou simplement faire 2 Thingto (mère M) et Thingto (Kid K)


En classe DTO, vous devriez avoir à la fois mère et enfant. mère privée mère; enfant enfant privé; // getter and Setter


OK et comment cette interface ou cette question ressemble-t-elle? Et comment dois-je régler le service pour mapper la mère / enfant de la mèredo? Avez-vous un exemple ou un tutoriel? Avez-vous un exemple ou un tutoriel?


Quelque chose comme ça: Pastebin.com/k6j7vxx6


3 Réponses :


2
votes

première solution:

Vous ne pouvez pas utiliser DTO et envoyer votre JSON avec la même structure de mère et kids et jackson dans printemps mvc désériorialiser correctement pour vous. xxx

deuxième solution :

Si vous souhaitez une structure différente dans JSON et des modèles et vous pouvez utiliser jackson annotation comme @jsonproperty ou @ Jsondeserialize . Lire Ceci comme pour plus d'informations.

Troisième solution:

Vous pouvez utiliser DozzerMapper pour un mappage complexe entre votre DTO et votre modèle. Vous définissez le fichier de XML pour mapper chaque modèle à votre DTO et DozzerMapper Carte Votre DTO à vos modèles.Read Ce lien Pour plus d'informations.


0 commentaires

1
votes

Vous avez 2 façons:

  1. Carte Dto aux entités par vous-même. Dans ce cas, vous devez créer une mappeuse personnalisée et définir comment DTO exactement doit être convertie en entité. Ensuite, simplement injecter et utilisez votre mappeuse personnalisée en service.
  2. Utilisez l'une des bibliothèques de mappeuse existantes. Par exemple, de bons candidats sont Mapstruct et ModelMapper . Vous pouvez trouver des exemples d'utilisation dans les guides de mise en route correspondants.

0 commentaires

3
votes

Je sais que c'est vieux et probablement longtemps résolu, mais laissez-moi offrir une prise différente sur le sujet.

Une autre option serait de concevoir une DTO uniquement dans le but de créer les deux entités que vous avez mentionnées. Vous pouvez appeler cette mère kilométraledto ou quelque chose comme ça, donc le nom transmet déjà son utilisation et peut-être créer une cible de repos consommant le DTO.

Les DTO asymétriques (réception et envoi) sont un motif établi et les DTO sont étroitement couplés au contrôleur de repos.


1 commentaires

Merci, c'est exactement ce que j'ai fait à la fin :)