如果源值在MapStruct中为null,则抛出NPE



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
}
}

在上面的实现中,如果源为null,则会引发NPE,但这会导致findbugs RCN_REDUNDANT_NULLCHECK_would_HAVE_BEEN_A_NPE错误,这基本上表明存在冗余的null检查。并且没有告诉mapstruct忽略null检查的选项,即NullValueCheckStrategy只有ALWAYS&ON_IMPLICIT_CONVERSION(默认值(,但没有IGNORE。

对源进行null检查并抛出NPE的最佳方法是什么?

PS:有没有办法将lombok的@NonNull与MapStruct结合使用?我尝试将它添加到mapstruct接口中的方法中,但这些方法被忽略了。

目前有一个支持JSR 330 NonNull注释的开放特性请求。

此刻你将不得不忽略那些冗余的检查警告

最新更新