java - mapstruct:将字段名称映射到属性
问题描述
源类:
class ReportSettings {
private HeaderSettings headerSettings;
private FooterSettings footerSettings;
// getters and setters omitted
}
class HeaderSettings {
private boolean showLogo;
// getters and setters omitted
}
class FooterSettings {
private boolean showPageNumber;
// getters and setters omitted
}
目标类:
class Parameters {
private String group;
private String name;
private String value;
// getters and setters omitted
}
是否可以使用 MapStruct 将对象转换为ReportSettings
对象, List<Parameters>
如下所示,其中类中的字段名称ReportSettings
映射到Parameter
类的group
字段:
group | name | value
----------------------------------------
headerSettings | showLogo | false
footerSettings | showPageNumber | true
解决方案
据我所知,没有这样的功能可以根据字段名称动态创建列表。
我想到的唯一想法是一个真正静态的解决方案,但我猜你有一个动态的字段列表,不能以这种方式做到这一点。
@Mapper
public abstract class ReportSettingsMapper {
@Mappings({
@Mapping(target = "group", constant = "headerSettings"),
@Mapping(target = "name", constant = "showLogo"),
@Mapping(target = "value", source = "headerSettings.showLogo")
})
protected abstract Parameters mapHeaderSettings(ReportSettings settings);
@Mappings({
@Mapping(target = "group", constant = "footerSettings"),
@Mapping(target = "name", constant = "showPageNumber"),
@Mapping(target = "value", source = "footerSettings.showPageNumber")
})
protected abstract Parameters mapFooterSettings(ReportSettings settings);
public List<Parameters> mapReportSettings(ReportSettings settings) {
List<Parameters> parameters = new ArrayList<>();
parameters.add( mapHeaderSettings(settings) );
parameters.add( mapFooterSettings(settings) );
return parameters;
}
}
(未经测试的代码;如果您使用 Java >= 8,则可以使用带有默认方法的接口 + 删除@Mappings
容器注释)
推荐阅读
- sap-cloud-sdk - EDM DateTime 字段无法按预期进行 Patch 调用 [发布 Cloud SDK 版本升级]
- webos - 如何访问/更改 LG webOS 电视上的系统设置?
- r - R密码分析
- python - 无需先保存图像即可将 Windows 10 背景更改为屏幕截图
- verilog - ATM FSM 有未知输出
- elasticsearch - ELK 将数据流转换回常规索引
- html - CSS - 我想在文本下显示图像
- c# - 在 Linux 上的 C# .net 核心中使用 odbc 进行编码的问题
- google-sheets - 将多组列从 1 个工作表合并到 1 个主数据
- laravel - Laravel 请求验证(带有数组的请求)