Java Reflection: Aufrufen der Setter- und Getter-Methode für den Sammlungsobjekttyp

8

Ich habe zwei verschiedene Pakete von User definiere Objekte .....

%Vor%

Hierarchie der Objekte und Name der Objekte auf beiden Seiten unterschiedlich. Ich möchte o  Kopieren Sie das Quellseitenobjekt zum Zielseitenobjekt, Feld für Feld oder  über Getter und Setter mit Reflection.

Zum Beispiel

Quellseitige Objekte

%Vor%

Zielseitenobjekte

%Vor%     
Z.I.J 22.01.2016, 10:44
quelle

4 Antworten

3

Ich habe viele Objekte studiert, die Frameworks für diese Aufgaben wie

kartieren

Schließlich wähle ich das Orika -Grundwerk, um das obige Mapping von Objekten zu Objekten zu vervollständigen. Wir können das Mapping über ein anderes Mapper-Framework machen, aber ich war wie Orika Framework, weil dieses Framework sehr einfach für die Zuordnung von Objekten zu Objekten.

Ich werde das Schritt für Schritt erklären.

1. Erstellen Sie die Objects of Source-Seite Object und Destination Side Object.

gefällt das ..

%Vor%

2. Erstellen der DefaultMapperFactory

%Vor%

3. Felder zuordnen

%Vor%

Es funktioniert gut Prost

    
Z.I.J 19.02.2016, 10:35
quelle
8

Ich denke, Sie könnten MapStruct verwenden, um zwischen POJOs mit unterschiedlichen Attributnamen zu mappen.

Aber Ihr Szenario ist komplex, weil Sie ws.lender.dto.CustomerAddresses in copl.com.dto.Customer umwandeln möchten, und das bedeutet, ein List<ws.lender.dto.PreviousAddress> enthalten in ein ws.lender.dto.PreviousAddresses Objekt in ein Set<copl.com.dto.CustomerAddress> in ein copl.com.dto.Customer zu konvertieren Objekt.

Also, ich werde das Schritt für Schritt erklären.

1. Konvertiere von ws.lender.dto.PreviousAddress in copl.com.dto.CustomerAddress

Um diese Konvertierung durchzuführen, benötigen Sie eine Schnittstelle (MapStruct erstellt eine Instanz dafür), die für die Zuordnung vom Quellobjekt zum Zielobjekt zuständig ist:

%Vor%

Diese Schnittstelle ordnet ein Objekt PreviousAddress einem CustomerAddress zu, wenn man berücksichtigt, dass das Attribut streetNo auf streetNumber abgebildet werden muss. Es gibt keine Zuordnung für das unitNumber -Attribut, da keine Quelle dafür vorhanden ist.

2. Konvertiere ein List<ws.lender.dto.PreviousAddress> in Set<copl.com.dto.CustomerAddress>

Nun müssen Sie der vorhandenen CustomerAddressesMapper Schnittstelle eine weitere Zuordnungsmethode hinzufügen:

%Vor%

Diese Methode verwendet das vorherige previousToCustomerObject , um jedes Element der Quellliste in den Zielsatz zu konvertieren.

3. Konvertiere von ws.lender.dto.CustomerAddresses in copl.com.dto.Customer

Schließlich müssen Sie die letzte Zuordnungsmethode zu CustomerAddressesMapper interface:

hinzufügen %Vor%

Dies ist die Stelle, an der Sie ein Ursprungsobjekt zuordnen, indem Sie das Attribut previousAddresses.previousAddress in das Attribut customerAddresses umwandeln, wobei Sie frühere Methoden verwenden.

4. Verwenden Sie den Mapper

Um den Mapper zu verwenden, müssen Sie folgenden Code schreiben:

%Vor%

5. Setup

MapStruct ist ein Quellcodegenerator, daher müssen Sie Ihre pom.xml richtig konfigurieren, um die MapStruct-Abhängigkeit einzuschließen und diese Codegenerierung aufzurufen. Sie können sehen, wie Sie dies hier

tun können

Nun, ich baue und führe diesen Code nicht, aber das ist der Weg, es zu tun.

Ich hoffe, es hilft!

    
malaguna 12.02.2016 07:59
quelle
2

Sie können Object Mapper ausprobieren besser zum Werfen oder Kopieren. Das Objekt für andere Klassen in anderen Paketen können Sie einen Eigenschaftswert wie

hinzufügen
  

senderClass und rvcClass

Später können Sie diese Eigenschaften lesen und mit der Konvertierung der Klasse fortfahren. Wahrscheinlich haben Sie bereits ein Mapping für die Absenderklasse gegen die Empfängerklasse bereit.

    
Bhushan Pawar 17.02.2016 04:10
quelle
1

Wenn ich Sie richtig verstehe, müssen Sie alle gleich genannten Eigenschaften von einem Objekt in ein anderes kopieren. Ähnlich benannte Eigenschaften wären Fälle, in denen das Quellobjekt eine Methode namens getPropertyName () hat und das Zielobjekt einen namens setPropertyName ().

Wenn dies zutrifft, möchten Sie die copyProperties-Methode der BeanUtils-Klasse aus der Apache Commons-Bibliothek verwenden. Dokumentation ist hier .

Nun haben Sie in Ihrem Beispiel einige entsprechende Eigenschaften, die nicht den gleichen Namen haben, z. B. StreetNumber und StreetNo. Ich fürchte, es gibt keinen einfachen Weg, diese Art von Dingen automatisch durch Reflexion zu bewältigen. Sie müssten die Zuordnungen zwischen Quell- und Zieleigenschaften selbst definieren, indem Sie zum Beispiel eine Hilfsklasse für das Kopieren definieren.

    
Ken Clubok 12.02.2016 04:32
quelle

Tags und Links