java - mapstruct 1.3 无法将 Enum 作为第一个方法参数
问题描述
假设您有一个模型类,它只有一个 Enum 变量
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
的是,你得到了不在这里的错误。因为它们都是同一个枚举。(并且 no@valueMapping
也不起作用)
显然这是 mapstruct 错误!
我的解决方案
这可能很愚蠢,但它有效。您需要做的就是添加另一个方法参数(如虚拟字符串)作为第一个方法参数,然后将您的 Enum 作为第二个方法参数。你不需要映射你的虚拟字符串,让它在那里......
@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 中的属性。
推荐阅读
- javascript - 自定义边缘样式 - cytoscape.js
- javascript - 您可以从一个 php 文件中获取多个 HTML 图像吗?
- apache-spark - 在 pyspark 中的 datetime64 和 datetime 之间转换
- c# - ArduinoUploader NuGet 包
- vb.net - 在 DataGridView 中重复显示相同的图像而不会过度使用内存
- java - Java Mail Listner:此电子邮件服务器不支持 RECENT 或 USER 标志
- node.js - NodeJS 中的 Axios 发布请求
- react-native - React Native Firebase Crashlytics 去混淆
- ios - 如何以编程方式快速使用 CAGradientLayer 将渐变设置为 UIView(子视图)?
- swift - SwiftUI ObservedObject 导致不需要的可见视图更新