java - 无法使用 mapstruct 和 lombok @Value 和 @Builder 映射多个值,可与 @Data 一起使用
问题描述
我有一个看起来像这样的映射
@Mapper(componentModel = "spring")
public interface CreateCdiMapper {
CreateCdiMapper INSTANCE = Mappers.getMapper(CreateCdiMapper.class);
@Mapping(source = "data.attributes.deviationShortDescription", target = "fields.summary")
@Mapping(source = "included.genericDeviationId", target = "fields.deviationId")
DeviationDto jsonToCreateJiraCdi(Deviation createDeviation);
}
使用 lomboks 使目标不可变@Value
,并且还具有@Builder
. 如果我注释掉任何一个字段,我的映射工作正常,即
//@Mapping(source = "data.attributes.deviationShortDescription", target = "fields.summary")
@Mapping(source = "included.genericBrandInternalReleation", target = "fields.deviationId")
DeviationDto jsonToCreateJiraCdi(Deviation createDeviation);
和
@Mapping(source = "data.attributes.deviationShortDescription", target = "fields.summary")
//@Mapping(source = "included.genericBrandInternalReleation", target = "fields.deviationId")
DeviationDto jsonToCreateJiraCdi(Deviation createDeviation);
两者都工作正常。我可以看到在生成的类中使用了 lomboks Builder。但是,如果我像上面的第一个示例一样不注释这两个映射,我会收到这些错误,说这两个字段都缺少写访问器。
"summary" has no write accessor in Fields for target name "fields.summary".
"deviationId" has no write accessor in Fields for target name "fields.deviationId"
我在我的 build.gradle
ext {
springBootVersion = '2.4.2'
mapstructVersion = "1.4.1.Final"
lombokVersion = "1.18.16"
lombokMapstructBindingVersion = "0.2.0"
}
implementation "org.mapstruct:mapstruct:${mapstructVersion}", "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}", "org.projectlombok:lombok:${lombokVersion}", "org.projectlombok:lombok-mapstruct-binding:${lombokMapstructBindingVersion}"
有人可以帮我理解为什么会这样吗?如果我删除@Value
and@Builder
而是使用@Data
,一切正常。
添加相关类
@Value
@Builder
public class Deviation{
Fields fields;
}
@Value
@Builder
public class Fields {
String summary;
String deviationId;
}
解决方案
推荐阅读
- sql - 用于 MERGE 查询的 TempDB 空间不足
- instagram - Instagram Graph API 评论 webhook
- terraform - 从 JSON 文件中提取环境变量并将变量传递给 terraform
- javascript - 在 Chrome 中绕过 CORS 问题
- scala - Scala 中的 JavaFX 为时已晚重绘
- unity3d - 在 OnGUI 中绘制具有颜色和粗细的矩形
- android - 应用程序是否可以包含用户可以控制应用程序权限的页面?
- google-chrome-extension - 如何在 Firefox/Chrome 网络扩展中动态初始化内容脚本?
- html - 在剑道 UI 搜索文本框上添加清除图标
- azure-data-factory-2 - 具有集成运行时的 Azure 数据工厂 - 复制后删除(或移动)文件