Skip to content

Version 1.5.3 doesn't consider Mapping annotations for nested objects (worked with 1.5.2) #3057

@Grosskopferter

Description

@Grosskopferter

Expected behavior

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2022-10-19T12:05:51+0200",
    comments = "version: 1.5.2.Final, compiler: Eclipse JDT (IDE) 1.4.200.v20220802-0458, environment: Java 11.0.16.1 (Eclipse Adoptium)"
)
@Component
public class TestMapperImpl extends TestMapper {

    @Override
    public Model dtoToModel(DTO dto) {
        if ( dto == null ) {
            return null;
        }

        Model model = new Model();

        model.setModelField( dto.getDtoField() );
        model.setNested( dtoToModel( dto.getNested() ) );

        return model;
    }
}

Actual behavior

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2022-10-19T12:08:22+0200",
    comments = "version: 1.5.3.Final, compiler: Eclipse JDT (IDE) 1.4.200.v20220802-0458, environment: Java 11.0.16.1 (Eclipse Adoptium)"
)
@Component
public class TestMapperImpl extends TestMapper {

    @Override
    public Model dtoToModel(DTO dto) {
        if ( dto == null ) {
            return null;
        }

        Model model = new Model();

        model.setModelField( dto.getDtoField() );
        model.setNested( dTOToModel( dto.getNested() ) );

        return model;
    }

    protected Model dTOToModel(DTO dTO) {
        if ( dTO == null ) {
            return null;
        }

        Model model = new Model();

        model.setNested( dtoToModel( dTO.getNested() ) );

        return model;
    }
}

Steps to reproduce the problem

Model class:

public class Model {
	private String modelField;
	private Model nested;

	public String getModelField() {
		return modelField;
	}

	public void setModelField(String modelField) {
		this.modelField = modelField;
	}

	public Model getNested() {
		return nested;
	}

	public void setNested(Model nested) {
		this.nested = nested;
	}

}

DTO class:

public class DTO {

	private String dtoField;

	private DTO nested;

	public String getDtoField() {
		return dtoField;
	}

	public void setDtoField(String dtoField) {
		this.dtoField = dtoField;
	}

	public DTO getNested() {
		return nested;
	}

	public void setNested(DTO nested) {
		this.nested = nested;
	}

}

Mapper:

@Mapper(componentModel = "spring")
public abstract class TestMapper {

	@Mapping(target = "modelField", source = "dtoField")
	public abstract Model dtoToModel(DTO dto);

}

MapStruct Version

MapStruct 1.5.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions