首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java MapStruct和VSCode

使用java MapStruct和VSCode
EN

Stack Overflow用户
提问于 2020-03-23 08:14:57
回答 2查看 3.3K关注 0票数 3

我在用java Mapstruct。与gradle bootRun一起运行是正常的,但是VSCode在调试和运行单元测试时遇到了一些问题:java.lang.ClassNotFoundException: Cannot find implementation

信息: IDE VSCode,SpringBoot 2.2.2,Java 11,Gradle 6.1.1

build.gradle:

代码语言:javascript
复制
compileJava {
    options.compilerArgs = [
            '-Amapstruct.defaultComponentModel=spring'
    ]
}

dependencies {
    implementation 'org.mapstruct:mapstruct-jdk8:1.3.1.Final'
    implementation 'org.mapstruct:mapstruct-processor:1.3.1.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
    testAnnotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
}

launch.json用于在VSCode中进行调试:

代码语言:javascript
复制
 {
            "type": "java",
            "name": "Debug (Launch)-DemoApplication<demo>",
            "request": "launch",
            "mainClass": "com.api.demo.DemoApplication",
            "projectName": "demo",
            "args": [
                "-Amapstruct.defaultComponentModel=spring",
                "-DprocessorIntegrationTest.debug=true",
                "-classpath",
                "${workspaceFolder}/build/classes/"
            ],
            "sourcePaths": [
                "${workspaceFolder}/build/generated/"
            ]
        }

Mapper文件:

代码语言:javascript
复制
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserPayloadMapper extends GenericPayloadMapper<User, UserRegistryRequest, UserRegistryResponse> {
    UserPayloadMapper INSTANCE = Mappers.getMapper(UserPayloadMapper.class);

    @Mapping(source = "userId", target = "id")
    public User fromRequest(UserRegistryRequest request);

    public UserRegistryResponse toResponse(User user);
}

有人能帮我配置VSCode来运行调试和单元测试吗?我认为在运行调试和单元测试之前,它不会加载生成的源代码,但我不知道如何修复它。

编辑:对于单元测试文件,如果我添加@SpringBootTest(classes = { UserPayloadMapper.class }),这将正确运行,但是在单元测试代码中与此映射程序无关,而且我有几个映射器,我不能将它们全部放入每个单元测试中。

EN

回答 2

Stack Overflow用户

发布于 2020-03-23 09:51:33

我找到了解决方案:添加@ComponentScan(basePackages = "com.api.demo/build/classes/java/main/com/api/demo/service/mapper")并工作(到mapstruct生成的文件夹)。

票数 0
EN

Stack Overflow用户

发布于 2021-08-02 18:13:02

build.gradle的依赖关系

代码语言:javascript
复制
dependencies {
    compile group: 'org.mapstruct', name: 'mapstruct-jdk8', version: '1.2.0.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'
}

从Dto映射到模型的接口

代码语言:javascript
复制
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface Mapper {
    DatabaseDto toModel(ModelDto source);
    // Converting DatabaseDto to ModelDto based on the matched Columns
    // Mappings with Different Column names from Source to Destination
    @Mappings({
        @Mapping(target="id", source="dto.employeeId"),
        @Mapping(target="name", source="dto.employeeName")
    })
    ModelDto fromModel(DatabaseDto dto);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60809894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档