2017-08-04 3 views
0

Ich versuche, eine Entität Order zu einer OrderDTO mit MapStruct abzubilden. Ich möchte OrderDTO ein neues Feld total hinzufügen, dieses Feld ist nicht in der ursprünglichen Entität Order verfügbar und sollte unter Verwendung der Informationen berechnet werden, die in der Order (Auftragseingang Preis, Menge, Steuern ...) verfügbar sind. Ich habe ein neues Feld total im OrderDTO und ich versuche, es zu kartieren durch eine Standardmethode zur Mapper-Schnittstelle ergänzt:MapStruct fügt ein neues berechnetes Feld zum dto hinzu

public interface OrderMapper { 

    ... 

    default BigDecimal orderToTotal(Order order){ 
     return logicToCalculateTotal(); 
    } 
} 

Als ich Mittagessen der Build MapStruct die Fehler startet

Nicht zugeordnete Zieleigenschaft: "total".

Irgendeine Idee, wie man dieses Problem löst?

Dank

Antwort

2

Es gibt mehrere Wege, um das zu erreichen, was Sie brauchen. Der erste Weg ist, @AfterMapping oder @BeforeMapping zu verwenden. Wenn Sie mit diesem Code gehen wird wie folgt aussehen:

public interface OrderMapper { 

    @Mapping(target = "total", ignore = true) // Needed so the warning does not shown, it is mapped in calculateTotal 
    OrderDto map(Order order); 

    @AfterMapping // or @BeforeMapping 
    default void calculateTotal(Order order, @MappingTarget OrderDto dto) { 
     dto.setTotal(logicToCalculateTotal()); 
    } 
} 

Der alternative Ansatz wäre zu tun, wie Sie begonnen haben, aber man muss sagen, dass total vom Order abgebildet wird.

Ihr Mapper in dem alternativen Ansatz wäre:

public interface OrderMapper { 

    @Mapping(target = "total", source = "order")// the source should be equal to the property name 
    OrderDto map(Order order); 

    default BigDecimal orderToTotal(Order order) { 
     return logicToCalculateTotal(); 
    } 
} 
Verwandte Themen