如何解决Mapstruct 不为 Immutables
我使用 Immutables 生成一些类 DTO 类,并使用 Mapstruct 将 JPA 实体映射到 DTO。只要 DTO 只有必需的属性,这很有效。如果不需要属性(通过使访问器方法返回 Optional
,根据 docs),由 Immutables 生成的构建器将有一个带有 Optional
参数的 setter 方法,它Mapstruct 将失败:
error: Can't map property "java.lang.Integer id" to "java.util.Optional<java.lang.Integer> id". Consider to declare/implement a mapping method: "java.util.Optional<java.lang.Integer> map(java.lang.Integer value)".
有道理,谢天谢地,有一个 option 也可用于生成采用可为空参数的方法。此选项生成一个 附加 方法,该方法采用可空参数。但是,无论是否存在此方法,Mapstruct 似乎都失败了。
作为一种解决方法,我实现了这个可憎的(但此时我宁愿自己实现映射方法):
@Mapper
public class OptionalMapper {
public <T> T unwrapOptional(final Optional<T> optional) {
return optional.orElse(null);
}
public <T> Optional<T> wrapIntoOptional(final T value) {
return Optional.ofNullable(value);
}
有什么方法可以让 Mapstruct 查找重载的方法(或先查看“正确”的方法)?我是在以错误的方式解决这个问题还是只是遗漏了什么?谢谢!
解决方法
目前编写自定义 OptionalMapper
是执行选项解包的方式。
我不认为这样做是件坏事。有一个开放的 issue 用于支持 Optional
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。