java - MapStruct @BeanMapping(qualifiedByName) 中的多个值
问题描述
我有一个映射器抽象类,其中我有一个从 dto 映射实体的函数。我想从这个抽象类中使用三种不同的方法,每个方法负责映射不同的东西。每个函数都用@Named
我放的主要映射函数及以上注释@BeanMapping
。如果我选择这三个函数中的一个,并且我将其命名为这样,@BeanMapiing(qualifiedByName = "x")
一切正常,但我想通过将它们的名称作为这样的数组来使用它们,它们@BeanMapping(qualifiedByName = {"x","y","z"})
都没有在实现的方法中使用。有什么办法可以使这项工作?我的代码如下所示:
public abstract class EntityMapper{
@BeanMapping(qualifiedByName = {"x","y","z"})
public abstract Entity dtoToEntity(Dto dto);
@Named("x")
@AfterMapping
public void methodX(Dto dto){
//implementation
}
@Named("y")
@AfterMapping
public void methodY(Dto dto){
//implementation
}
@Named("z")
@AfterMapping
public void methodZ(Dto dto){
//implementation
}
}
解决方案
目前不支持选择多种不同的@Named
方法。当在其中使用多个方法时,BeanMapping#qualifiedByName
您需要在类或方法上使它们都可用。
我建议通过将您的方法移动到不同的类/接口中然后注释那个来研究嵌套限定符。
例如
@Named("classLevel")
public class Utils {
@Named("methodLevel")
@AfterMapping
public void methodX(Dto dto){
//implementation
}
@Named("methodLevel")
@AfterMapping
public void methodY(Dto dto){
//implementation
}
@Named("methodLevel")
@AfterMapping
public void methodZ(Dto dto){
//implementation
}
}
接着
@BeanMapping(qualifiedByName = {"classLevel", "methodLevel"})
推荐阅读
- kubernetes - Kubernetes pod 性能受损
- python - 无法安装 python avro 库
- javascript - React Native:使用 Canvas 制作具有模糊效果的图像编辑器
- javascript - 服务器端媒体录播webRTC
- vue.js - 为什么我的 vue.js 项目 URL 的描述在某些应用程序中显示为“noscript”
- django - Django 管理模板错误
- c++ - Qt 使小部件的字体大小与分辨率无关
- google-cloud-platform - 云函数设置限制最大实例
- .net - Docker compose 未为 appsettings.json 部分设置数组环境设置
- docker - Docker 保护包含二进制文件和源代码的镜像和容器