Java 强制mapstruct不调用has*方法
我编写了一个mapstruct映射器,它使用如下映射: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
@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的示例