mapstruct 1.3 无法将枚举作为第一个方法参数
mapstruct 1.3 can not get Enum as first method parameter
假设您有一个模型 class,它只有一个枚举变量
public class MyModel {
private MyEnum enum;
//getter and setter
}
并且您想要一个只映射您的单个枚举的映射器方法。
@Mapper(componentModel = "spring")
public interface MyCustomeMapper {
@BeanMapping(ignoreByDefault = true)
@Mapping(source = "enum", target = "enum")
MyModel toMyModel(MyEnum enum);
}
但遗憾的是您收到了 Can't generate mapping method from enum type to non-enum type
错误,但错误不在此处。因为它们都是相同的枚举。 (没有 @valueMapping
也不起作用)
很明显是 mapstruct 错误!
我的解决方案
这可能很愚蠢,但确实有效。您需要做的就是添加另一个方法参数(如虚拟字符串)作为第一个方法参数,然后将您的枚举作为第二个方法参数。你不需要映射你的虚拟字符串,让它在那里......
@Mapper(componentModel = "spring")
public interface MyCustomeMapper {
@BeanMapping(ignoreByDefault = true)
@Mapping(source = "enum", target = "enum")
MyModel toMyModel(String dummy, MyEnum enum);
}
现在第一个方法参数不是枚举,因此 mapstruct 不会给您带来任何问题。
无论如何,如果有任何解决方案,我正在寻找更好的解决方案。
此错误仅出现在 MapStruct 1.3 中。从 MapStruct 1.4 开始,支持将 Enum 源参数映射到 Bean 中的 属性。
假设您有一个模型 class,它只有一个枚举变量
public class MyModel {
private MyEnum enum;
//getter and setter
}
并且您想要一个只映射您的单个枚举的映射器方法。
@Mapper(componentModel = "spring")
public interface MyCustomeMapper {
@BeanMapping(ignoreByDefault = true)
@Mapping(source = "enum", target = "enum")
MyModel toMyModel(MyEnum enum);
}
但遗憾的是您收到了 Can't generate mapping method from enum type to non-enum type
错误,但错误不在此处。因为它们都是相同的枚举。 (没有 @valueMapping
也不起作用)
很明显是 mapstruct 错误!
我的解决方案
这可能很愚蠢,但确实有效。您需要做的就是添加另一个方法参数(如虚拟字符串)作为第一个方法参数,然后将您的枚举作为第二个方法参数。你不需要映射你的虚拟字符串,让它在那里......
@Mapper(componentModel = "spring")
public interface MyCustomeMapper {
@BeanMapping(ignoreByDefault = true)
@Mapping(source = "enum", target = "enum")
MyModel toMyModel(String dummy, MyEnum enum);
}
现在第一个方法参数不是枚举,因此 mapstruct 不会给您带来任何问题。 无论如何,如果有任何解决方案,我正在寻找更好的解决方案。
此错误仅出现在 MapStruct 1.3 中。从 MapStruct 1.4 开始,支持将 Enum 源参数映射到 Bean 中的 属性。