gpt4 book ai didi

java - mapstruct:将字段名称映射到属性

转载 作者:行者123 更新时间:2023-11-30 02:06:09 25 4
gpt4 key购买 nike

源类:

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类(class)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,您可以使用具有默认方法的接口(interface) + 删除 @Mappings 容器注释)

关于java - mapstruct:将字段名称映射到属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51293074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com