返回类型中的未知属性

时间:2016-07-02 17:49:13

标签: jpa java-8 playframework-2.4 mapstruct

我正在尝试在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")

错误可能是什么问题?

3 个答案:

答案 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>