首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mapstruct -映射从基类扩展的DTO时的编译失败

Mapstruct -映射从基类扩展的DTO时的编译失败
EN

Stack Overflow用户
提问于 2021-01-09 08:18:58
回答 1查看 598关注 0票数 2

我试着绘制这个地图:

代码语言:javascript
复制
public class UserInfoDTO {
    private String addressDto;
}
代码语言:javascript
复制
public class B extends UserInfoDTO {
    private String roleId;
}
代码语言:javascript
复制
public class A extends UserInfoDTO {
    private String groupId;
}

发自:

代码语言:javascript
复制
public class Entity {
    private Address address;
}

Address包含一些字段和"String“字段。

我想在实体和DTO之间映射

代码语言:javascript
复制
@Mapper(componentModel = "jsr330")
public interface IUserMapper {
   A aFromEntity (Entity entity); 
   B bFromEntity (Entity entity); 
   
   @Mappings({
            @Mapping(target = "addressDto", source = "entity.address.city")
   })
   UserInfoDTO fromEntity (Entity entity); 
}

但我遇到一个编译失败,“无法将属性地址映射到字符串addressDto”。(请帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-09 08:45:28

您需要向类添加getter和setter:

MapStruct的一般理念是生成尽可能多的代码,就像您自己亲手编写的那样。特别是,这意味着通过普通的getter/setter调用将值从源复制到目标,而不是反射或类似的调用。

MapStruct 1.4.1.最终参考指南

更新.如果不是getter/setter,而是使用Lombok。

在编译期间不要忘记annotationProcessorPaths,这样Lombok就可以生成getter和setter。

Maven示例:

代码语言:javascript
复制
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>                        
                        <annotationProcessorPaths>
                            <path>
                                <groupId>org.mapstruct</groupId>
                                <artifactId>mapstruct-processor</artifactId>
                                <version>${org.mapstruct.version}</version>
                            </path>
                            <path>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>${org.projectlombok.version}</version>
                            </path>
                            <path>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok-mapstruct-binding</artifactId>
                                <version>${lombok-mapstruct-binding.version}</version>
                            </path>
                        </annotationProcessorPaths>
                    </configuration>
                </plugin>       
            </plugins>
        </pluginManagement>
    </build>

分级实例

代码语言:javascript
复制
dependencies {
   // Lombok
   compileOnly 'org.projectlombok:lombok:1.18.2'
   annotationProcessor 'org.projectlombok:lombok:1.18.2'

   // MapStruct
   compileOnly 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
   annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65640668

复制
相关文章

相似问题

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