我正在尝试在Play 2.4 Java8 JPA项目中使用mapstruct。我已经完成的步骤:
添加了依赖
"org.mapstruct" % "mapstruct-jdk8" % "1.1.0.Beta1",
"org.mapstruct" % "mapstruct-processor" % "1.1.0.Beta1"
模型
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String fullName;
private String email;
}
EmployeeDto
public class EmployeeDto {
private String full_name;
private String email;
}
EmployeeMapper
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "fullName", target = "full_name")
EmployeeDto employeeToEmployeeDto(Employee employee);
}
但它给我一个编译错误
error: Unknown property "full_name" in return type.
[error] @Mapping(source = "fullName", target = "full_name")
错误可能是什么问题?
答案 0 :(得分:6)
目标端的bean需要具有映射属性的setter。
MapStruct不使用反射来获取或设置映射类型中的状态,在生成的代码中使用普通的getter / setter调用来将状态从源传播到目标。
答案 1 :(得分:2)
兄弟姐妹们好。
就我而言,要同时使用 Mapstruct(0.2.0) 和 Lombok(1.18.16),下面的块应该位于三个“路径”块的最前面或中间。 我的意思是 1)mapstruct,2)lombok-mapstruct-binding 和 3)lombok 或 1)lombok-mapstruct-binding,2)mapstruct 和 3)lombok 为我工作。
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
答案 2 :(得分:0)
其他开发人员的其他情况::如果您使用Lombok,则maven仅使用MapStruct处理器。因此,龙目岛无法生成吸气剂/吸气剂。要解决此问题,请在annotationProcessorPaths
中添加lombok依赖项。
此外,如果您使用Lombok 1.8.16及更高版本,则也必须添加lombok-mapstruct-binding
。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</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>${projectlombok.version}</version>
</path>
<!-- This is needed when using Lombok 1.8.16 and above -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.1.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>