gpt4 book ai didi

java - 如何在Java中使用MapStruct进行参数化映射?

转载 作者:行者123 更新时间:2023-12-02 10:44:08 25 4
gpt4 key购买 nike

我有以下实体类

public class Company {

private Map<Locale, String> name;

/* Other fields, getters, setters */
}

以及以下 DTO 类

public class CompanyHeader {

private String name;

/* Other fields, getters, setters */
}

因此,我的实体包含不同语言的名称,我想将其映射到给定的区域设置

这是我的映射器类

@Mapper
public interface CompanyMapper {

CompanyHeader entityToHeader(Company company, Locale locale);

@Named("getByLocale")
default String getValueByLocale(Map<Locale, String> map, Locale locale) {
return map.get(locale);
}
}

现在我的问题是,我应该如何注释我的映射方法,以便它将 company 理解为我的源对象,将 getValueByLocale 方法理解为 的映射方法name 字段,以及 locale 作为 getValueByLocale 方法的参数?

这是我如何从外部使用我的映射方法

public Page<CompanyHeader> getCompanies(CompanyFilter companyFilter, Locale locale) {
Page<Company> companies = getCompanies(companyFilter);
Page<CompanyHeader> headers = companies.map(company -> companyMapper.entityToHeader(company, locale));

return headers;
}

最佳答案

您试图解决的问题似乎是 @Context 的一个很好的用法。 .

如果你定义你的映射器像

@Mapper
public interface CompanyMapper {

CompanyHeader entityToHeader(Company company, @Coontext Locale locale);

default String getValueByLocale(Map<Locale, String> map, @Context Locale locale) {
return map.get(locale);
}
}

通过使用 @Context您告诉 MapStrut 该对象不应被视为映射对象并且它可以传递给其他对象。通过这种方法,您将能够映射所有 Map<Locale, String>属性变成 String .

您可以阅读有关 @Context 的更多信息在 Passing context or state objects to custom methods

关于java - 如何在Java中使用MapStruct进行参数化映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52718181/

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