【发布时间】:2020-11-04 01:40:10
【问题描述】:
我在尝试从整数值映射到 ENUM 时遇到问题,我的方法映射它:
@Mapping(
target = "myModel.states",// this is my ENUM
source = "source.stateId") // this is the Integer Value
ClsTargetModel mapCreditCard(ClsMyClass source);
ENUM 和实体模型:
实体:
@Getter
@Setter
@Entity
@Table(name = "my_table")
public class MyEntityModel {
@Id
@Column(name = "id")
private Integer id;
@Basic
@Column(name = "description")
private String description;
}
枚举:
@Getter
@ToString
public enum EnumStates {
STATE1(1),
STATE2(2),
STATE3(3);
public Integer id;
EnumStates(Integer id) {
this.id = id;
}
public static EnumStates getStateById(Integer stateId) {
return Arrays.stream(EnumStates.values())
.filter(enumStateValue -> enumStateValue.id == stateId)
.findFirst()
.orElse(null);
}
}
当我尝试将 ID 从模型实体映射到 ENUM 时,mapstruct 显示错误:
error: Can't map property "java.lang.Integer Id" to "EnumStates states". Consider to declare/implement a mapping method: "EnumStates map(java.lang.Integer value)".
我认为该方法是在枚举中声明的,但是 mapstruct 总是响应该错误,请您检查我的代码吗?
【问题讨论】:
-
这对我有用.. 不使用 Getter 或 ToString 注释。复制到Java Playground..i.stack.imgur.com/8yHR2.png所以它一定是我认为的注释中的东西。
-
谢谢@JGFMK,很奇怪,我在使用mapstruct的逻辑中看不到错误。
-
github.com/mapstruct/mapstruct/issues/749 - 似乎是这里讨论的一个问题。但不确定他们从哪里得到的。