2016-06-13 2 views
5

아래와 같이 매핑을 만듭니다. (거리, 도시 등)와 같은 플랫 개체 개체 속성을 도메인 개체의 중첩 주소에 매핑하는 방법 내가 오류가있어하려고하면mapstruct를 사용하여 중첩 된 객체를 매핑합니다.

[ERROR] diagnostic: Unknown property "address.postalCode" in return type. @Mapping(source = "city", target = "address.city"),

@Mapper(componentModel = "spring", uses = {}) 
public interface CompanyMapper { 
    @Mappings({ 
      @Mapping(source = "id", target = "id"), 
      @Mapping(source = "street", target = "address.street"), 
      @Mapping(source = "city", target = "address.city"), 
      @Mapping(source = "postalCode", target = "address.postalCode"), 
      @Mapping(source = "province", target = "address.province"), 
    }) 
    DomainObject map(DtoObject dto); 

그리고 클래스 ...

public class Address { 
      private String street; 
      private Integer streetNumber; 
      private String city; 
      private String postalCode; 
      private String province; 
      //getters and setters 
    } 
public class DomainObject { 
     private String id; 
     private Address address; 
     //getters and setters 
} 

public class DtoObject { 
     private String id; 
     private String street; 
     private String city; 
     private String postalCode; 
     private String province; 
     //getters and setters 
} 

답변

4

중첩을 대상 측에 사용하려는로는 아직 지원되지 않습니다. 이 기능 요청 (issue #389)이 있지만 아직 구현하지 않았습니다.

+0

그렇다면이 문제에 대한 다른 해결책이 있습니까? 표현이 소스에 있다면 작동한다고 생각합니다! – TinyOS

+0

대상에서 @Gunnar 중첩은 여전히 ​​지원되지 않습니다. 그렇다면이 "목표 측면 중첩"이 롬복과 함께 지원됩니다. –

0

한 가지 방법으로 그 방법을 찾을 수 없습니다. 여기 내 해결책은 다음과 같습니다.

@Mapper 
public interface DtoObjectMapper { 

    Address toAddress(DtoObject dtoObject); 

    DomainObject toDomainObject(DtoObject dtoObject, Address address); 

} 

@Component 
public class SomeClass { 

    @Autowired 
    private DtoObjectMapper dtoObjectMapper; 

    public DomainObject convert(DtoObject dtoObject) { 
     return dtoObjectMapper.toDomainObject(dtoObject, dtoObjectMapper.toAddress(dtoObject)); 
    } 
} 
관련 문제