2017-07-26 3 views
0

Ich versuche, Entity-Objekt in DTO abzubilden, um auf die Frontend-App zu übertragen. Abfrage gibt eine Liste zurück, die institutionName und internalName enthält, und ich möchte sie List der modelsInstitution und modelsInternalName in DTO zuordnen. Ich bin mit meiner Mapper-Klasse festgefahren.Mapsstruct: Map-Objekt in Liste zu Objekt

Unten ist mein Entity:

@Entity 
@DynamoDBTable(tableName = "Inventory") 
public class Inventory 
{ 
    @Id 
    private String id; 
    private String institutionName; 
    private String internalName; 
    private String lanAdapter; 

    public Inventory() { 
    } 

    public Inventory(String Id,String InstitutionName, String LanAdapter, String InternalName) 
    { 
     this.id = Id 
     this.lanAdapter = LanAdapter; 
     this.institutionName = InstitutionName; 
     this.internalName = InternalName; 

    } 

    @DynamoDBHashKey(attributeName = "Id") 
    public String getId() 
    { 
     return id; 
    } 
    public void setId(String id) 
    { 
     this.id=id; 
    } 

    @DynamoDBAttribute(attributeName = "InstitutionName") 
    public String getInstitutionName() 
    { 
     return institutionName; 
    } 
    public void setInstitutionName(String InstitutionName) 
    { 
     this.institutionName = InstitutionName; 
    } 

    @DynamoDBAttribute(attributeName = "LanAdapter") 
    public String getLanAdapter() 
    { 
     return lanAdapter; 
    } 
    public void setLanAdapter(String LanAdapter) 
    { 
     this.lanAdapter = LanAdapter; 
    } 

     @DynamoDBAttribute(attributeName = "InternalName") 
    public String getInternalName() 
    { 
     return internalName; 
    } 
    public void setInternalName(String InternalName) 
    { 
     this.internalName = InternalName; 
    } 
} 

Unten ist mein DTO Objekt:

public class FilterDto 
{ 
    private List<String> modelsInstitution; 
    private List<String> modelsInternalName; 

    public FilterDto(List<String> modelsInstitution, List<String> versions) { 
     super(); 
     this.modelsInstitution = modelsInstitution; 
     this.modelsInternalName = modelsInternalName; 
    } 

    public List<String> getModelInstitution() { 
     return modelsInstitution; 
    } 
    public void setModelInstitution(List<String> modelsInstitution) { 
     this.modelsInstitution = modelsInstitution; 
    } 
    public List<String> getModelInternalName() { 
     return modelsInternalName; 
    } 
    public void setModelInternalName(List<String> modelsInternalName) { 
     this.modelsInternalName = modelsInternalName; 
    } 
} 

Mapper Klasse:

Meine Mapping ist nicht richtig, ich bin fehlt, wie Entity zur Karte in Auf DTO auflisten.

@IterableMapping(elementTargetType = Inventory.class) 
@Mappings({ 
    @Mapping(target="modelsInstitution", expression="java(inventory.getInstitution())"), 
    @Mapping(target="modelsInternalName", expression="java(inventory.getInternalName())") 
}) 
FilterDto InventoryToFilterDTO1(List<Inventory> inventory); 
+0

Sie sollten unbedingt auf Lombok gehen: https://projectlombok.org/ – Krzysiek

Antwort

1

Das kann man mit MapStruct nicht wirklich sauber machen. Ich würde Ihnen empfehlen, diese Zuordnung manuell vorzunehmen.

Ihre Zuordnung kann wie folgt aussehen:

public interface MyMapper { 

    default FilterDto InventoryToFilterDTO1(List<Inventory> inventory) { 
     List<String> institutions = new ArrayList<>(inventory.size()); 
     List<String> names = new ArrayList<>(inventory.size()); 

     for(Inventory inv: inventory) { 
      institutions.add(inv.getInstitution()); 
      names.add(inv.getInternalName())); 
     } 

     return new FilterDto(institutions, names); 
    } 
} 

Theoretisch könnte es eine Möglichkeit, dies mit MapStruct zu tun, durch die Verwendung @Context, @AfterMapping, @BeforeMapping und @ObjectFactory. Dies wäre jedoch sehr viel komplexer.

Verwandte Themen