[英]How to do parameterized mapping using MapStruct in Java?
我有以下實體課程
public class Company {
private Map<Locale, String> name;
/* Other fields, getters, setters */
}
和以下DTO類
public class CompanyHeader {
private String name;
/* Other fields, getters, setters */
}
因此,我的實體包含不同語言的名稱,我想將其映射到給定的Locale
這是我的制圖師課
@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
更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.