首页 > 解决方案 > mapstruct:1.4.0.CR1:使用“。”时出错 作为目标属性

问题描述

如前所述,这里是目标“。” 运营商有效吗?我试图得到“。” 运算符作为目标属性工作,但在此配置下的构建过程中出现错误,如下所示:

银行类

@Data
public class BankEntity {

    private CustomerEntity customer;
}

客户类

@Data
public class CustomerEntity {

    private String id;
    private String name;
}

CustomerDto 类

@Data
public class CustomerDto {

    private String id;
    private String name;
}

映射器类

public interface CustomerMapper {

    @Mapping(target = ".", source = "bank.customer")
    CustomerDto toDto(BankEntity bank);

}

简单的测试用例

    @Test
    public void bankToCustomerDtoTest() {
        BankEntity bank = new BankEntity();
        CustomerEntity customer = new CustomerEntity();
        customer.setId("123");
        customer.setName("Smith");
        bank.setCustomer(customer);
        CustomerMapper customerMapper = Mappers.getMapper(CustomerMapper.class);
        CustomerDto dto = customerMapper.toDto(bank);
        System.out.println(dto);
    }

错误:(7、8)java:映射处理器中的内部错误:org.mapstruct.ap.internal.util.Collections 处的 java.util.ArrayList$Itr.next(ArrayList.java:854) 处的 java.util.NoSuchElementException .first(Collections.java:50) 在 org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.handleDefinedMappings(BeanMappingMethod.java:477) 在 org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.build(BeanMappingMethod .java:184) 在 org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMapper(MapperCreationProcessor.java:151) 在 org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMappingMethods(MapperCreationProcessor.java:376) 在 org. mapstruct.ap.internal.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:122) 在 org.mapstruct.ap.internal.processor.MapperCreationProcessor。org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:283) 的进程(MapperCreationProcessor.java:76) org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:263) 的 org.mapstruct.ap.MappingProcessor .processMapperElements(MappingProcessor.java:221) 在 org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:156) 在 com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794) 在 com。 sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705) 在 com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) 在 com.sun.tools.javac.processing .JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035),位于 com.sun.tools.javac。processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) 在 com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) 在 com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler. java:856) 在 com.sun.tools.javac.main.Main.compile(Main.java:523) 在 com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129) 在 com.sun .tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138) 在 org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:207) 在 org.jetbrains.jps.incremental.java.JavaBuilder.compileJava (JavaBuilder.java:486) 在 org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:338) 在 org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:263) 在org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:216) 在 org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1006) 在 org.jetbrains.jps.incremental 的 org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1328) .IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1073) 在 org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:967) 在 org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:796) 在org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:378) 在 org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178) 在 org.jetbrains.jps.cmdline.BuildRunner.runBuild( BuildRunner.java:140) 在 org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:297) 在 org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:232) 在 java.util 的 org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:130)。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

标签: javamapstruct

解决方案


推荐阅读