将Java 8可选与Mapstruct一起使用

艾哈迈德·阿齐兹(Ahmed Aziz):

我有这两节课:

public class CustomerEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String firstName;
    private String lastName;
    private String address;
    private int age;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
}

public class CustomerDto {
    private Long customerId;
    private String firstName;
    private String lastName;
    private Optional<String> address;
    private int age;
}

问题在于Mapstruct无法识别可选变量“地址”。

任何人都知道如何解决它,并让Mapstruct映射可选字段吗?

古斯塔沃·帕西尼(Gustavo Passini):

Mapstruct尚不支持此功能。他们的Github上有一张公开票要求此功能:https : //github.com/mapstruct/mapstruct/issues/674

同一票证的注释中添加了解决此问题的一种方法:https : //github.com/mapstruct/mapstruct/issues/674#issuecomment-378212135

@Mapping(source = "child", target = "kid", qualifiedByName = "unwrap")
Target map(Source source);

@Named("unwrap")
default <T> T unwrap(Optional<T> optional) {
    return optional.orElse(null);
}

如@dschulten所指出的,如果要在设置选项的同时使用此变通方法nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,则需要定义一个方法,该方法具有boolean hasXXX()用于XXXOptional内部类型字段的签名该类是映射源(docs中的解释)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章