簡體   English   中英

如何在Java中使用MapStruct進行參數化映射?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM