2017-11-23 25 views
0

안녕하세요, mappig 변수가 필요합니다. 어떻게 목록에 맵핑 할 수 있습니다. 내 요청은 다음과 같습니다.mapstruct를 사용하여 List <>에 매핑하는 방법

public class Request { 
    private String Id; 
    private List<ApplicationData> applicationData; 

    @Data 
    @NoArgsConstructor 
    @AllArgsConstructor 
    public static class ApplicationData { 
     private String data1; 
     private String data2; 
     private String data3; 
    } 
} 

내 매퍼 난 당신이 싱글 목록으로 값을 매핑 할 이해하는 것과

@Mapper(componentModel = "spring") 
public abstract class StoreApplicationRequestMapper { 
    @Mapping(target = "Id", source = "data.Id") 
    @Mapping(target = "applicationData.???.data1", source = "data.data1") 
    @Mapping(target = "applicationData.???.data2", source = "data.data2") 
    @Mapping(target = "applicationData.???.data3", source = "data.data3") 
    public abstract Request map(Data variables); 
} 
+0

: 같은

당신 매퍼가 보일 것이다. 질문을 편집하여 예상 결과를 보여 주거나 코드가 원하는 것을 설명하는 의사 코드를 보여줄 수 있습니까? – Phil

+0

이 생각은 하나의 요소 List를 만드는 것이라고 생각합니다. 'expression'을 사용해보십시오. @Mapping (target = "applicationData", expression = "java (Collections.singletonList (new ApplicationData (variables.data.data1, variables.data.data2, variables.data.data3)))"과 같은 것은 클래스 이름은 아마 패키지로 완전하게 될 수 있습니다. –

답변

0

. 매퍼에서 2 가지 새로운 메소드를 제공하여이를 달성 할 수 있습니다. 당신이 필요 분명하지 않다

@Mapper(componentModel = "spring") 
public abstract class StoreApplicationRequestMapper { 
    @Mapping(target = "Id", source = "Id") 
    @Mapping(target = "applicationData", source = "variables")   
    public abstract Request map(Data variables); 

    protected List<ApplicationData> mapToList(Data variables) { 
     return variables == null ? null : mapToApplication(variables); 
    } 

    //Add mappings if they are needed 
    protected abstract ApplicationData mapToApplication(Data variables); 
}