Seb*_*ian 5 java mapping mapstruct
我编写了一个使用如下映射的映射结构映射器:
@Mapping(target = "userId", source = "id.userId")
Run Code Online (Sandbox Code Playgroud)
当我查看自动生成的映射结构类时,我偶然发现了该代码:
if ( !foobar.hasId() ) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是一个问题,因为这hasId()不是 mapstruct 所期望的。我可以以某种方式强制 mapstruct 不生成使用此方法但检查id != null或其他内容的代码吗?
我可以使用类似的映射@Mapping(target = "userId", expression= "java(...)"),但我认为应该有另一种方法。
是的,您可以强制 MapStruct 不要使用这些presenceCheckers。您可以在文档中的源存在检查中找到更多信息。
基本上,执行此操作的唯一方法是提供 MapStruct 的实现AccessorNamingStrategy。您可以扩展DefaultAccessorNamingStrategy并覆盖它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
}
Run Code Online (Sandbox Code Playgroud)
记得用文件注册你的 SPIMETA-INF-/services/com.example.MyAccessorNamingStrategy
您还可以在示例中找到 SPI 的示例。
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |