2017-04-06 61 views
0

我有一個集合作爲其唯一屬性的CXF生成的類。我需要將來自DTO的單個值映射到該集合的一個元素中,如下所示:如何將字符串屬性映射到列表的第一個元素<String>屬性?

class DTO { 
    String dto; 
} 

class A { 
    String a; 
} 

class B { 
    List<A> b; 
} 

interface Mapper { 
    @Mappings({ 
     @Mapping(source="dto", target="b.a") 
    }) 
    B getBfromDTO(DTO dto); 
} 

這應該是否真的有效? 如果是這樣,我怎麼配置這個映射?

+0

的可能的複製[MapStruct字符串到列表映射(http://stackoverflow.com/questions/37143179/mapstruct-string-to-list-mapping) – Wolfie

回答

0

我無法找到一種方法來做到這一點作爲一個映射,從@Gunnar的其他答案我現在明白這是不可能的,但我找到了一個解決方法,使用註釋@AfterMapping

@AfterMapping允許指定映射發生後要運行的方法,因此我爲我的對象的非集合屬性創建了映射,併爲對象中的集合添加了一個@AfterMapping

class DTO { 
    String a; 
    String x; 
} 

class A { 
    String a; 
} 

class B { 
    String x; 
    List<A> b; 
} 

abstract class Mapper { 
    @Mappings({ 
     @Mapping(source="x", target="x") 
    }) 
    protected abstract B getBfromDTO(DTO dto); 

    @AfterMapping 
    protected void fillCollections(DTO dto, @MappingTarget B b) { 
     b.getB().add(dto.a); 
    } 
} 
相關問題