Java 目标列表迭代mapstruct

Java 目标列表迭代mapstruct,java,spring-boot,jakarta-ee,mapstruct,Java,Spring Boot,Jakarta Ee,Mapstruct,我正在使用mapstruct并尝试映射两种不同类型的对象。这就是要求。 目标对象结构如下(层次结构) 我使用的是1.2.0.Final版本,能够映射 Object1必须与SourceObject1映射 //List to List mapping @Mapping(target = "Object1", source = "SourceObject1") Target from(Source); @Mapping(target = "Object1[0].Object2", source = "

我正在使用mapstruct并尝试映射两种不同类型的对象。这就是要求。
目标对象结构如下(层次结构)

我使用的是1.2.0.Final版本,能够映射 Object1必须与SourceObject1映射

//List to List mapping
@Mapping(target = "Object1", source = "SourceObject1")
Target from(Source);
@Mapping(target = "Object1[0].Object2", source = "SourceObject2") 
Mapping(target = "Object1[0].Object3", source = "SourceObject3") 
//not casting and not mapping working.Also Need to map String fields under 
list Object.

这很简单,你只需要让mapstruct发挥它的魔力! 一个简单的例子:

目标类别:

public class Object1 {
    private List<Object2> list;

    public List<Object2> getList() {
        return list;
    }

    public void setList(List<Object2> list) {
        this.list = list;
    }
}

public class Object2 {
    private List<Object3> list;

    public List<Object3> getList() {
        return list;
    }

    public void setList(List<Object3> list) {
        this.list = list;
    }
}

public class Object3 {
    private List<Object4> list;

    public List<Object4> getList() {
        return list;
    }

    public void setList(List<Object4> list) {
        this.list = list;
    }
}

public class Object4 {
    private String field;

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}
生成的代码:

@Override
public Object1 map(SourceObject1 source) {
    if ( source == null ) {
        return null;
    }

    Object1 object1 = new Object1();

    object1.setList( sourceObject2ListToObject2List( source.getList() ) );

    return object1;
}

@Override
public Object2 map(SourceObject2 source) {
    if ( source == null ) {
        return null;
    }

    Object2 object2 = new Object2();

    object2.setList( sourceObject3ListToObject3List( source.getList() ) );

    return object2;
}

@Override
public Object3 map(SourceObject3 source) {
    if ( source == null ) {
        return null;
    }

    Object3 object3 = new Object3();

    object3.setList( sourceObject4ListToObject4List( source.getList() ) );

    return object3;
}

@Override
public Object4 map(SourceObject4 source) {
    if ( source == null ) {
        return null;
    }

    Object4 object4 = new Object4();

    object4.setField( source.getField() );

    return object4;
}

protected List<Object2> sourceObject2ListToObject2List(List<SourceObject2> list) {
    if ( list == null ) {
        return null;
    }

    List<Object2> list1 = new ArrayList<Object2>( list.size() );
    for ( SourceObject2 sourceObject2 : list ) {
        list1.add( map( sourceObject2 ) );
    }

    return list1;
}

protected List<Object3> sourceObject3ListToObject3List(List<SourceObject3> list) {
    if ( list == null ) {
        return null;
    }

    List<Object3> list1 = new ArrayList<Object3>( list.size() );
    for ( SourceObject3 sourceObject3 : list ) {
        list1.add( map( sourceObject3 ) );
    }

    return list1;
}

protected List<Object4> sourceObject4ListToObject4List(List<SourceObject4> list) {
    if ( list == null ) {
        return null;
    }

    List<Object4> list1 = new ArrayList<Object4>( list.size() );
    for ( SourceObject4 sourceObject4 : list ) {
        list1.add( map( sourceObject4 ) );
    }

    return list1;
}
@覆盖
公共对象1映射(SourceObject1源){
if(source==null){
返回null;
}
Object1 Object1=新的Object1();
setList(sourceObject2ListToObject2List(source.getList());
返回对象1;
}
@凌驾
公共对象2映射(源对象2源){
if(source==null){
返回null;
}
Object2 Object2=新的Object2();
setList(sourceObject3ListToObject3List(source.getList());
返回对象2;
}
@凌驾
公共对象3映射(源对象3源){
if(source==null){
返回null;
}
Object3 Object3=新的Object3();
setList(sourceObject4ListToObject4List(source.getList());
返回对象3;
}
@凌驾
公共对象4映射(SourceObject4源){
if(source==null){
返回null;
}
Object4 Object4=新的Object4();
object4.setField(source.getField());
返回对象4;
}
受保护列表sourceObject2ListToObject2List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
对于(SourceObject2 SourceObject2:list){
列表1.add(map(sourceObject2));
}
返回列表1;
}
受保护列表sourceObject3ListToObject3List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
用于(SourceObject3 SourceObject3:列表){
列表1.add(map(sourceObject3));
}
返回列表1;
}
受保护列表sourceObject4ListToObject4List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
对于(SourceObject4 SourceObject4:list){
列表1.add(map(sourceObject4));
}
返回列表1;
}

这很简单,你只要让mapstruct发挥它的魔力就行了! 一个简单的例子:

目标类别:

public class Object1 {
    private List<Object2> list;

    public List<Object2> getList() {
        return list;
    }

    public void setList(List<Object2> list) {
        this.list = list;
    }
}

public class Object2 {
    private List<Object3> list;

    public List<Object3> getList() {
        return list;
    }

    public void setList(List<Object3> list) {
        this.list = list;
    }
}

public class Object3 {
    private List<Object4> list;

    public List<Object4> getList() {
        return list;
    }

    public void setList(List<Object4> list) {
        this.list = list;
    }
}

public class Object4 {
    private String field;

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}
生成的代码:

@Override
public Object1 map(SourceObject1 source) {
    if ( source == null ) {
        return null;
    }

    Object1 object1 = new Object1();

    object1.setList( sourceObject2ListToObject2List( source.getList() ) );

    return object1;
}

@Override
public Object2 map(SourceObject2 source) {
    if ( source == null ) {
        return null;
    }

    Object2 object2 = new Object2();

    object2.setList( sourceObject3ListToObject3List( source.getList() ) );

    return object2;
}

@Override
public Object3 map(SourceObject3 source) {
    if ( source == null ) {
        return null;
    }

    Object3 object3 = new Object3();

    object3.setList( sourceObject4ListToObject4List( source.getList() ) );

    return object3;
}

@Override
public Object4 map(SourceObject4 source) {
    if ( source == null ) {
        return null;
    }

    Object4 object4 = new Object4();

    object4.setField( source.getField() );

    return object4;
}

protected List<Object2> sourceObject2ListToObject2List(List<SourceObject2> list) {
    if ( list == null ) {
        return null;
    }

    List<Object2> list1 = new ArrayList<Object2>( list.size() );
    for ( SourceObject2 sourceObject2 : list ) {
        list1.add( map( sourceObject2 ) );
    }

    return list1;
}

protected List<Object3> sourceObject3ListToObject3List(List<SourceObject3> list) {
    if ( list == null ) {
        return null;
    }

    List<Object3> list1 = new ArrayList<Object3>( list.size() );
    for ( SourceObject3 sourceObject3 : list ) {
        list1.add( map( sourceObject3 ) );
    }

    return list1;
}

protected List<Object4> sourceObject4ListToObject4List(List<SourceObject4> list) {
    if ( list == null ) {
        return null;
    }

    List<Object4> list1 = new ArrayList<Object4>( list.size() );
    for ( SourceObject4 sourceObject4 : list ) {
        list1.add( map( sourceObject4 ) );
    }

    return list1;
}
@覆盖
公共对象1映射(SourceObject1源){
if(source==null){
返回null;
}
Object1 Object1=新的Object1();
setList(sourceObject2ListToObject2List(source.getList());
返回对象1;
}
@凌驾
公共对象2映射(源对象2源){
if(source==null){
返回null;
}
Object2 Object2=新的Object2();
setList(sourceObject3ListToObject3List(source.getList());
返回对象2;
}
@凌驾
公共对象3映射(源对象3源){
if(source==null){
返回null;
}
Object3 Object3=新的Object3();
setList(sourceObject4ListToObject4List(source.getList());
返回对象3;
}
@凌驾
公共对象4映射(SourceObject4源){
if(source==null){
返回null;
}
Object4 Object4=新的Object4();
object4.setField(source.getField());
返回对象4;
}
受保护列表sourceObject2ListToObject2List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
对于(SourceObject2 SourceObject2:list){
列表1.add(map(sourceObject2));
}
返回列表1;
}
受保护列表sourceObject3ListToObject3List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
用于(SourceObject3 SourceObject3:列表){
列表1.add(map(sourceObject3));
}
返回列表1;
}
受保护列表sourceObject4ListToObject4List(列表列表){
if(list==null){
返回null;
}
List list1=新的ArrayList(List.size());
对于(SourceObject4 SourceObject4:list){
列表1.add(map(sourceObject4));
}
返回列表1;
}

问题是什么?问题是什么?源类类似于belowpublic类SourceObject1{private List;private List list3;}源类类似于belowpublic类SourceObject1{private List;private List list3;}
public class SourceObject1 {
    private List<SourceObject2> list;

    public List<SourceObject2> getList() {
        return list;
    }

    public void setList(List<SourceObject2> list) {
        this.list = list;
    }
}

public class SourceObject2 {
    private List<SourceObject3> list;

    public List<SourceObject3> getList() {
        return list;
    }

    public void setList(List<SourceObject3> list) {
        this.list = list;
    }       
}

public class SourceObject3 {
    private List<SourceObject4> list;

    public List<SourceObject4> getList() {
        return list;
    }

    public void setList(List<SourceObject4> list) {
        this.list = list;
    }
}

public class SourceObject4 {
    private String field;

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}
@Mapper
public interface  MapperExample {

    Object1 map(SourceObject1 source);

    Object2 map(SourceObject2 source);

    Object3 map(SourceObject3 source);

    Object4 map(SourceObject4 source);
}
@Override
public Object1 map(SourceObject1 source) {
    if ( source == null ) {
        return null;
    }

    Object1 object1 = new Object1();

    object1.setList( sourceObject2ListToObject2List( source.getList() ) );

    return object1;
}

@Override
public Object2 map(SourceObject2 source) {
    if ( source == null ) {
        return null;
    }

    Object2 object2 = new Object2();

    object2.setList( sourceObject3ListToObject3List( source.getList() ) );

    return object2;
}

@Override
public Object3 map(SourceObject3 source) {
    if ( source == null ) {
        return null;
    }

    Object3 object3 = new Object3();

    object3.setList( sourceObject4ListToObject4List( source.getList() ) );

    return object3;
}

@Override
public Object4 map(SourceObject4 source) {
    if ( source == null ) {
        return null;
    }

    Object4 object4 = new Object4();

    object4.setField( source.getField() );

    return object4;
}

protected List<Object2> sourceObject2ListToObject2List(List<SourceObject2> list) {
    if ( list == null ) {
        return null;
    }

    List<Object2> list1 = new ArrayList<Object2>( list.size() );
    for ( SourceObject2 sourceObject2 : list ) {
        list1.add( map( sourceObject2 ) );
    }

    return list1;
}

protected List<Object3> sourceObject3ListToObject3List(List<SourceObject3> list) {
    if ( list == null ) {
        return null;
    }

    List<Object3> list1 = new ArrayList<Object3>( list.size() );
    for ( SourceObject3 sourceObject3 : list ) {
        list1.add( map( sourceObject3 ) );
    }

    return list1;
}

protected List<Object4> sourceObject4ListToObject4List(List<SourceObject4> list) {
    if ( list == null ) {
        return null;
    }

    List<Object4> list1 = new ArrayList<Object4>( list.size() );
    for ( SourceObject4 sourceObject4 : list ) {
        list1.add( map( sourceObject4 ) );
    }

    return list1;
}