DTO aus mehrere Entitäten erstellen

Avalon

Bekanntes Mitglied
Hallo, ich habe mehrere Entitäten per @ManyToOne Annotation in Relation gesetzt (Spring Boot, Maven, JPA usw.). Wie bekomm ich es jetzt hin, aus den gesammelten Daten ein DTO Objekt zu erstellen (ich brauch ja nicht alles von allen Entitäten)? Im Moment habe ich von allen Entitäten die ich brauche alle Attribute als Rückgabewert als Json Format (Get Request).
 
Naja, du definiertst du deine DTO-Klasse so, wie du sie brauchst, und erstellst dann Objekte davon, bei DTOs ist wirklich keinerlei Magie im Spiel. Oder zielt deine Frage auf irgendwas bestimmtes ab?
 
Ah. Hallo mrBrown. Ich habe eine Entität sagen wir mal "Auftragskopf". Darin habe ich, per @ManyToOne Annotation, Beziehungen über Fremdschlüssel zu den Entitäten "Auftrag", "Auftragsposition", "Kunde", "Produkt" hergestellt. Wenn jetzt ein Get-Request an den Endpunkt im Controller kommt, bekomme ich einen vollständigen Datensatz aller in Beziehung stehender Entitäten (JSON Format) mit sämtlichen Variablen aus der Datenbank. Den will ich in ein DTO konvertieren, da ich nicht alle Daten benötige. Bei einer einzelnen Entität ist das ja nicht so wild. Da lass ich dann einfach die Variablen weg, die ich nicht brauche, oder ignoriere sie per mapstruct, so daß ich gar kein DTO benötige. Aber hier ist das anderes. In einem JSON ist alles komplett drin. Und hab keinen Schimmer, wie ich da ein DTO draus machen kann. Irgendwie fehlt mir da der entscheidende Gedanke, der wo es klick macht. :-D

Java:
@GetMapping(path = "/auftragskopf/{id}"

und zurück bekomme ich dann auftragskopf, auftrag, auftragsposition, kunde, produkt in einem einzigen JSON Objekt.
 
Zuletzt bearbeitet:
Vergiss erstmal JSON und so, das ist jalles rein auf Java-Ebene.

Ein DTO ist einfach nur ein ganz normales Java-Objekt, ohne irgendwelche Magie. Du erstellst einfach für deine Controller-Methode Klassen, die ganz das enthalten, was dieser Endpunkt zurückgeben soll.

Wenn das zB ein Auttragskopf mit unr Kunde und Auftrag ist, dann legst du eine AuttragskopfDTO an, was dann KundeDTO und AuftragDTO nutzt, und alle Klassen enthalten jeweils nur das, was benötigt wird.

Da lass ich dann einfach die Variablen weg, die ich nicht brauche, oder ignoriere sie per mapstruct, so daß ich gar kein DTO benötige.
Wie lässt du denn Dinge weg und wohin mappst du die Entity mit MapStruct, wenn du kein DTO nutzt?
 
Wenn das zB ein Auttragskopf mit unr Kunde und Auftrag ist, dann legst du eine AuttragskopfDTO an, was dann KundeDTO und AuftragDTO nutzt, und alle Klassen enthalten jeweils nur das, was benötigt wird.
Danke. Nach ewigem hin- und her grübeln, hatte ich es dann auch. 😵

Wie lässt du denn Dinge weg und wohin mappst du die Entity mit MapStruct, wenn du kein DTO nutzt?
Java:
@Mapper
public interface PersonMapper {

    @Mapping(target="id", ignore = true)
    Person map(Person source);
}

Hab ich von hier:

Wie man DTOs vermeidet
 
Java:
@Mapper
public interface PersonMapper {

    @Mapping(target="id", ignore = true)
    Person map(Person source);
}

Hab ich von hier:

Wie man DTOs vermeidet

Der Artikel und der Code ist ein ziemliches Negativbeispiel, sowohl der Code als auch die Erklärung dazu.


Die eigentliche Stärke von Mapstruct liegt ja grad in der Benutzung zusammen mit DTOs. Mapstruct anstatt DTOs zu nutzen, ist völliger Unsinn.
 

Neue Themen


Zurück
Oben