Java 强制mapstruct不调用has*方法

Java 强制mapstruct不调用has*方法,java,mapping,mapstruct,Java,Mapping,Mapstruct,我编写了一个mapstruct映射器,它使用如下映射: @Mapping(target = "userId", source = "id.userId") 当我查看自动生成的mapstruct类时,我突然想到了这段代码: if ( !foobar.hasId() ) { return null; } 这对我来说是个问题,因为hasId()与mapstruct在这里所期望的不一样。我是否可以强制mapstruct不生成使用此方法但检查id!=空还是什么 我可以使用像@mapping(t

我编写了一个mapstruct映射器,它使用如下映射:

@Mapping(target = "userId", source = "id.userId")
当我查看自动生成的mapstruct类时,我突然想到了这段代码:

if ( !foobar.hasId() ) {
    return null;
}
这对我来说是个问题,因为
hasId()
与mapstruct在这里所期望的不一样。我是否可以强制mapstruct不生成使用此方法但检查
id!=空
还是什么


我可以使用像
@mapping(target=“userId”,expression=“java(…)”)
这样的映射,但我认为应该有另一种方法。

是的,您可以强制MapStruct不使用那些
呈现检查器。您可以在文档中找到更多信息

基本上,唯一的方法是提供MapStruct的实现。您只需扩展并覆盖其
isPresenceCheckMethod

您可以访问方法
ExecutableElement
,还可以检查它所在的类的类型以及其他内容

MyAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

    @Override
    public boolean isPresenceCheckMethod(ExecutableElement element) {
        //You can do your checks here. You can ignore certain methods, from certain classes

    }
记住使用文件
META-INF-/services/com.example.myaccessornamigstrategy

还有一个示例,您可以在其中找到SPI的示例