2016-06-13 318 views
5

我创建如下的映射。如何将平面dto对象属性(如街道,城市等)映射到域对象中的嵌套地址。当我尝试,我得到了一个错误:使用映射映射嵌套对象

[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); 

} 

while using;

@Component 
public class SomeClass { 

    @Autowired 
    private DtoObjectMapper dtoObjectMapper; 

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