【问题标题】:ModelMapper mapping enum to same enum returns nullModelMapper 将枚举映射到相同的枚举返回 null
【发布时间】:2021-08-30 14:51:48
【问题描述】:

我有一个实体,有一个枚举类型字段和一个具有相同枚举类型和字段名称的 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映射到实体对象后,实体对象上的gender为null。

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

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

请帮助我理解这个问题。

【问题讨论】:

  • 您能提供您的示例的可运行代码吗?特别是映射器到底是什么?

标签: java enums mapping modelmapper access-levels


【解决方案1】:

您的 UserDTO.gender 是一个没有 getter 的公共字段。另一方面,UserModel.gender 是一个带有 getter 的私有字段。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多