需要使用 mapstruct 将两个源对象合并到目标对象中,这里 source1 中的一个字段有 List,而 source2 中的一个字段是 string

G S*_*Ari 3 java mapstruct

public class Source1 {
    private String name;               //srihari  
    private List<String> city_names;   //city_names.add("hyderabad-india")
 }
public class Soruce2 {
    private String name;
    private String city_name;            //hyderabad-india
    private List<String> technologies;   //Arrays.asList("java","mapstruct")
 }
public class Target {
    private String name;            // Result: srihari 
    private String city_names;      // Result: hyderabad-india
    private String technologies;    // Result: java, mapstruct
}`
Run Code Online (Sandbox Code Playgroud)

list 只有一个值意味着 list.size()=1。如果 source1 名称为空,则必须从 source2 中获取。并且目标应包含所有字段,即使这些字段在一个源中不可用

Sja*_*aak 5

尝试:

@Mapper
public interface MyMapper{

   // will map all other fields that you specify
   @Mapping( target = "city_names", ignore = true )
   @Mapping( target = "technologies", ignore = true )
   Target map(Source1 s1, Soruce2 s2);

   default map(Source1 s1, Soruce2 s2, @MappingTarget Target t) {
      // do whatever you like with city_names and technologies
   }


}
Run Code Online (Sandbox Code Playgroud)