我有这两节课:
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映射可选字段吗?
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()
用于XXX
类Optional
内部类型字段的签名,该类是映射源(docs中的解释)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句