2016-07-06 6 views
0

mapstrcut을 사용하여 내 항목을 dto에 매핑하고 있습니다. 이제 DTO에있는 문제가 있습니다. "discount"인 추가 필드가 있고이 필드 채우기를 관리하기 위해 mapstruct가 필요하며이 필드는 2 개의 값 (salePrice 및 retailPrice)을 기반으로 계산됩니다.Mapstruct - 수식을 사용하여 필드 매핑 (예 : taget = "x", source = "a + b")

내 질문 mapstruct를 사용하는 것과 같이 어떻게 이런 종류의 매핑을 할 수 있습니까?

@Mapping(target="discount", source="retailPrice-salePrice") 

난 건물은 말한다 동안이 줄의 코드 휴식을 추가하는 시도 :

error: No property named "salePrice*retailPrice" exists in source parameter(s). 
      @Mapping(source="salePrice*retailPrice", target="discount") 

그래서 어떻게 같은 매핑을 할 수 있습니까?

답변

3

이에 대한 Java expressions의 기능을 사용할 수 있습니다 : 그대로

@Mapping(target="discount", expression="java(source.getRetailPrice() - source.getSalePrice()") 

주어진 "표현"

는 생성 된 코드에 추가됩니다. 필요한 경우 @Mapper#imports()을 통해 생성 된 클래스에 추가 가져 오기를 추가 할 수 있습니다.

우리는했습니다 (매우 모호한)과 같은 표현을 위해 실제 스크립트 언어를 지원하기위한 계획,하지만 우리는 아직 없습니다 :)

+0

감사가 잘 :) 작동 @Gunner –