1

我有一个实体,具有枚举类型字段和具有相同枚举类型和字段名称的 DTO。

@Entity
@Table(name = "user")
public class UserModel {

    @Id
    @GeneratedValue
    private int id;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Gender gender;

    // getters and setters
}

public class UserDto {
    public Gender gender;
}

public enum Gender {
    male,
    female,
    unisex
}

我通过创建一个没有额外配置的新对象来使用 modelMapper 。

但是在将 dto 映射到实体对象之后,实体对象上的性别为空。

Dto 对象有性别,我已经检查了很多。

UserModel user = mapper.map(dto, UserModel.class);
user.getGender(); // null

请帮助我理解这个问题。

4

1 回答 1

0

UserDTO.gender是一个没有吸气剂的公共领域。另一方面UserModel.gender是带有 getter 的私有字段。

ModelMapper 似乎不会混合字段和方法访问,因此您需要通过字段或方法访问双方。

尝试将您的 ModelMapper 配置为读/写私有字段,因此不要使用 getter 和 setter:

ModelMapper mm = new ModelMapper();
mm.getConfiguration()
    .setFieldMatchingEnabled(true)
    .setFieldAccessLevel(AccessLevel.PRIVATE);

另一种选择是声明您的UserDto.gender私有并为此设置一个吸气剂。

于 2021-06-15T09:07:38.960 回答