2017-10-09 6 views
1

내가지도 또는 특정 분야지도 DTO에서 단 특정 필드 -지도 - 구조체

예를 들어 데이터를 작성해야 어디 유스 케이스를 사용> 모델 : 내가 객체 인 UserDTO로 변환 할 필요가 사용자 모델이를 username과 accountId와 같은 특정 입력란은 입니다.

모델 :

public class UserCore{ 

     private String accountId; 

     private String username; 
     private String workEmail; 
     private String firstName; 
     private String password; 
     private String hashedPassword; 

    } 

객체 인 UserDTO : 내가 예를 들어 대상

에 소스 만 특정 필드를 매핑 할 수 있도록 지도 - 구조체에서 어떤 방법

public class UserCoreDTO{ 

     private String accountId; 

     private String username; 
     private String workEmail; 
     private String firstName; 
     private String password; 
     private String hashedPassword; 

    } 

있다 : UserMapper mapper = Mappers.getMapper (UserMapper.class);

mapper.map (fieldsToFetch, source, destination);

+0

지금까지 해보신 것은 무엇입니까? –

+0

@DarrenForsythe 내가 map-struct 문서에서 위의 요구 사항에 대한 지원을 찾지 못했지만 그 이유가 무엇인지 알았습니다. 모든 신체가 지금까지 해본 적이있는 것, 심지어 이해하는 질문을 말하는 것은 일반적인 관행입니다. –

답변

0

은 다음 예는 docs을 형성입니다 :

@Mapper 
public interface FishTankMapper { 

    @Mappings({ 
     @Mapping(target = "fish.kind", source = "fish.type"), 
     @Mapping(target = "fish.name", ignore = true), 
     @Mapping(target = "ornament", source = "interior.ornament"), 
     @Mapping(target = "material.materialType", source = "material"), 
     @Mapping(target = "quality.report.organisation.name", source = "quality.report.organisationName") 
    }) 
    FishTankDto map(FishTank source); 
} 

ignore = true

아마 모든 필드의 예에서와 같이 단지 중첩 된 필드 작동합니다.

+0

여기에 우리는 하드 코딩 필드를 제외해야합니다 상처를 의미하지 않습니다. 내 질문은 다르다. 우리가 할 수있는 역동적 인 방법이 있습니까? 예를 들어 fieldsToFetch = username, salary (즉, API 응답에 사용자 이름과 월급 만 포함해야 함)이라는 요청 param을 사용하는 API를 개발하고 있습니다. fieldsToFetch는 클라이언트 기준입니다. –

+0

찾고있는 것은 작동하지 않습니다. Map struct는 매핑 클래스 _at build time_에 대한 Java 코드를 생성합니다. 런타임시에만 필드를 알 수 있으므로 런타임에이 문제를 해결하기 위해 리플렉션을 사용하는 도구를 살펴 봐야합니다. 빌드 타임에 mapstruct를 수행하는 이유는 런타임에 반영해야하는 비용이 발생하지 않기 때문입니다. – Alpar