我有以下实体类
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
字段的映射方法,并且{ {1}}作为locale
方法的参数?
这是我从外部使用映射方法的方式
getValueByLocale
答案 0 :(得分:1)
您要解决的问题似乎是@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
中。
您可以在Passing context or state objects to custom methods
中详细了解@Context