java - Mapstruct 映射器扩展
问题描述
嗨,这似乎适用于添加额外的方法,但不适用于在现有方法上添加新注释。假设我们有以下类:
public class SourceClass {
private String field_1;
private String field_2;
}
public class TargetParent {
private String field_a;
}
public class TargetChild extends TargetParent {
private String field_b;
}
父对象是可以由其他方扩展的框架的一部分。子对象是添加新字段的具体扩展的示例。
我正在计划一种使用 Mapping Hierarchy 的方法,如下所示:
@Mapper
public interface ParentMapper {
@Mapping(source="field_1", target="field_a")
public TargetParent convert(SourceClass source);
}
@Mapper
public interface ChildMapper extends ParentMapper {
@Mapping(source="field_2", target="field_b")
public TargetChild convert(SourceClass source);
}
我期待看到 ChildMapper 的实现具有:
public TargetChild convert(SourceClass source){
// target instanciation through factory here
target.setField_a(field_1);
target.setField_b(field_2);
}
但这不起作用:@Mapping 注解似乎没有被继承。
我可以尝试找出一些替代解决方案,但似乎我开始破解框架,这不是我的意图。
我在这里错过了什么吗?
解决方案
如果要继承某些注释,则应使用映射配置继承。
例如
@Mapper
public interface ParentMapper {
@Mapping(source="field_1", target="field_a")
public TargetParent convert(SourceClass source);
}
@Mapper(config = ParentMapper.class)
public interface ChildMapper {
@Mapping(source="field_2", target="field_b")
@InheritConfiguration
public TargetChild convert(SourceClass source);
}
推荐阅读
- c# - Razor 页面日期输入月份和日期在提交时切换
- gundb - 使用 GunDB 在 IndexedDB 中存储过多
- docker - .net Core - docker 镜像的兼容性
- python - 如何在永远循环中停止等待从套接字接收的greenlet
- c# - 如何在 Selenium 中定位 Angular 元素?
- symfony - 忽略 packagist.org 并为一个包指定路径
- java - java.lang.UnsatisfiedLinkError chilkat 库
- react-native - 使用 Expo 的 React Native:错误:Metro Bundler 进程以代码 1 退出
- r - 我如何在 R 的图中修复图例
- spring-roo - 如何禁用 mvc html 字段?