我试着绘制这个地图:
public class UserInfoDTO {
private String addressDto;
}public class B extends UserInfoDTO {
private String roleId;
}public class A extends UserInfoDTO {
private String groupId;
}发自:
public class Entity {
private Address address;
}Address包含一些字段和"String“字段。
我想在实体和DTO之间映射
@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”。(请帮助:)
发布于 2021-01-09 08:45:28
您需要向类添加getter和setter:
MapStruct的一般理念是生成尽可能多的代码,就像您自己亲手编写的那样。特别是,这意味着通过普通的getter/setter调用将值从源复制到目标,而不是反射或类似的调用。
更新.如果不是getter/setter,而是使用Lombok。
在编译期间不要忘记annotationProcessorPaths,这样Lombok就可以生成getter和setter。
Maven示例:
<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>分级实例
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'
}https://stackoverflow.com/questions/65640668
复制相似问题