2016-06-13 20 views
5

Tworzę mapowanie jak poniżej. Jak odwzorować właściwości obiektów płaskich dto, takie jak (ulica, miasto itp.), Na adres zagnieżdżony w obiekcie domeny. Kiedy próbuję Mam błąd:Mapowanie zagnieżdżonego obiektu z 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); 

i klas ...

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 
} 

Odpowiedz

4

zagnieżdżanie na stronie docelowej, jak próbują wykorzystać to nie jest jeszcze obsługiwany. Wystąpiła o to prośba o funkcję (issue #389), ale jeszcze nie wdrożyliśmy tego.

+0

, czy istnieje inne rozwiązanie tego problemu? Myślę, że to zadziała, jeśli wyrażenie jest w źródle! – TinyOS

+0

@Gunnar Zagnieżdżanie po stronie docelowej nadal nie jest obsługiwane? a jeśli tak, to to "zagnieżdżanie strony docelowej" jest wspierane przez lombok po wyjęciu z pudełka? –

0

Nie mogłem znaleźć sposobu, aby to zrobić za pomocą jednej metody. Oto moje rozwiązanie:

@Mapper 
public interface DtoObjectMapper { 

    Address toAddress(DtoObject dtoObject); 

    DomainObject toDomainObject(DtoObject dtoObject, Address address); 

} 

podczas korzystania;

@Component 
public class SomeClass { 

    @Autowired 
    private DtoObjectMapper dtoObjectMapper; 

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