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

时间:2018-10-09 09:55:52

标签: java mapstruct

我有以下实体类

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

1 个答案:

答案 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