【发布时间】:2021-09-13 02:08:37
【问题描述】:
MapStruct 默认将 NullValueMappingStrategy 设置为 RETURN_NULL。我的要求是当 source 为 null 时,我需要抛出一个 NPE,类似于 lombok 的 @NonNull 的工作方式。
但我想目前 MapStruct 不支持此功能。所以我使用@BeforeMapping 来调用一个默认方法,在该方法中我检查null 并抛出NPE。
@BeforeMapping
default void checkForNullArguments(Object anySource) {
if(anySource == null){
throw new NullPointerException("Source is null");
}
}
所以mapstruct实现是通过以下方式生成的:
public Bar mapToBar(Foo foo) {
this.checkForNullArguments(foo);
if (foo == null) {
return null;
} else{
..... //Actual mapping logic
}
}
通过上述实现,如果源为空,则会引发 NPE,但会导致 findbugs RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE 错误,这基本上表示存在冗余空检查。 并且没有选项可以告诉 mapstruct 忽略空检查,即 NullValueCheckStrategy 只有 ALWAYS & ON_IMPLICIT_CONVERSION(默认值)但没有 IGNORE。
对源进行 null 检查并抛出 NPE 的最佳方法是什么?
PS: 有没有什么办法可以结合 MapStruct 使用 lombok 的 @NonNull ?我尝试将它添加到 mapstruct 接口中的方法,但这些都被忽略了。
【问题讨论】: