sin*_*ash 3 jpa java-8 mapstruct playframework-2.4
我试图在我的Play 2.4 Java8 JPA项目中使用mapstruct.我做的步骤:
添加了依赖关系
"org.mapstruct" % "mapstruct-jdk8" % "1.1.0.Beta1",
"org.mapstruct" % "mapstruct-processor" % "1.1.0.Beta1"
Run Code Online (Sandbox Code Playgroud)
模型
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String fullName;
private String email;
}
Run Code Online (Sandbox Code Playgroud)
EmployeeDto
public class EmployeeDto {
private String full_name;
private String email;
}
Run Code Online (Sandbox Code Playgroud)
EmployeeMapper
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "fullName", target = "full_name")
EmployeeDto employeeToEmployeeDto(Employee employee);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个编译错误
error: Unknown property "full_name" in return type.
[error] @Mapping(source = "fullName", target = "full_name")
Run Code Online (Sandbox Code Playgroud)
错误可能是什么问题?
ene*_*ral 10
其他开发人员的附加案例:如果您使用 Lombok,maven 仅使用 MapStruct 处理器。所以 Lombok 无法生成 getter/setter。要解决该问题,请在annotationProcessorPaths.
此外,如果您使用 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>
Run Code Online (Sandbox Code Playgroud)
小智 8
兄弟姐妹们大家好。
就我而言,要同时使用 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>
Run Code Online (Sandbox Code Playgroud)
目标端的bean需要具有映射属性的setter.
MapStruct不使用反射来获取或设置映射类型中的状态,在生成的代码中使用普通的getter/setter调用来将状态从源传播到目标.