我使用Immutables生成一些类DTO类,并使用Mapstruct将JPA实体映射到DTO。只要DTO只有所需的属性,这就非常有效。如果不需要属性(根据文档,通过使访问器方法返回Optional
(,则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)".
这是有道理的,值得庆幸的是,有一个选项可以用来生成采用可为null的参数的方法。此选项生成一个附加方法,该方法采用可为null的参数。然而,无论是否存在此方法,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
是执行选项展开的方法。
我不认为那样做是件坏事。支持Optional
存在一个悬而未决的问题