Mapstruct 添加参数不可能吗?

问题描述 投票:0回答:1

我想使用特定类来升级我的 MapStruct 映射器来删除重复的代码,但我真的不知道如何做到这一点,因为在我的情况下,我必须为每个映射器使用特定类,但我不知道是否可以有一种方法可以使用/传递除我的源和目标之外的其他内容

映射器示例:

    @Named("idsToActivity")
    default List<Activity> idsToActivity(List<Long> longs) {
        return longs.stream().map(id -> {
            if (id == null) {
                return null;
            }
            Activity activity = new Activity();
            activity.setId(id);
            return activity;
        }).collect(Collectors.toList());
    }

我尝试了类似的方法在我的映射器中使用它:

    private List<?> mapperIdToEntity(List<Long> longs){
        return longs.stream()
                .map(id -> {
                    if (id == null) {
                        return null;
                    }
                    ClassFromMapstruct entity = new ClassFromMapstruct();
                    entity.setId(id);
                    return entity;
                }).collect(Collectors.toList());
    }
java performance mapstruct mapper
1个回答
0
投票

是的,可以在 Mapstruct 映射中添加更多参数,而不仅仅是“源”和“目标”。一个简单的例子如下:

地图绘制者:

public interface TestMapper {

    @Mapping(source = "testObject.name", target = "nameInDto")
    @Mapping(source = "testObject.age", target = "ageInDto")
    @Mapping(source = "someString", target = "someStringInDto")
    TestDTO mapToDto(TestObject testObject, String someString);
}

实体

@Data
@AllArgsConstructor
public class TestObject {
    private String name;
    private Integer age;
}  

DTO

@Data
public class TestDTO {

    private String nameInDto;
    private Integer ageInDto;
    private String someStringInDto;
}

单元测试中的概念证明

@Spy
private TestMapper testMapper = Mappers.getMapper(TestMapper.class);

@Test
void mappingTest() {
    TestDTO helloWorld = testMapper.mapToDto(new TestObject("aaa",32), "Hello World");
    System.out.println(helloWorld);
}

输出:TestDTO(nameInDto = aaa,ageInDto = 32,someStringInDto = Hello World)

© www.soinside.com 2019 - 2024. All rights reserved.