当前位置: 首页 > 知识库问答 >
问题:

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

吴俊风
2023-03-14
public class Company {

    private Map<Locale, String> name;

    /* Other fields, getters, setters */
}
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方法的参数?

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;
}

共有1个答案

祁英哲
2023-03-14

您试图解决的问题似乎是@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 属性映射为string

 类似资料:
  • 我在mapstruct映射器上遇到了问题。当运行mvn clean install(或mvn clean compile)时,我会得到以下错误: 问题是我不知道mapstruct从哪里获得这个“java.lang.Integer Architecture.Loads”。我不明白这个整数是从哪里来的,正如您在我的代码中看到的,没有整数。而且,到目前为止,我在使用类似的映射器时从未遇到过这个错误。 下

  • 我希望在两个平台之间执行ECDH以导出共享密钥。我计划使用命名曲线(该曲线尚未确定)。该流看起来像这样: Alice挑了一条曲线 Alice为她的曲线生成一个随机密钥对 Alice序列化了一些关于她的曲线的数据 Alice将她的公钥和曲线数据发送给Bob Bob用Alice的数据初始化一条曲线 Bob根据Alice的数据创建密钥对 Bob执行ECDH派生共享秘密 Bob用他的公钥回应Alice A

  • 我想用Kotlin中的Mapstruct将实体映射到带有嵌套DTO的DTO。 在Java中,这是这样的:。 应该如何使用Kotlin实现它?

  • 关于MapStruct的问题。我有这样的情况,我从基实体扩展类,但不知道如何映射它。这是我的箱子。 BaseEntity: 基础: 没有显示错误,在映射器实现(生成的代码)中没有该ID的映射:

  • 我正在使用MapStruct从一个JPA实体映射到一个POJO DTO,在一个带有依赖项注入的Spring应用程序中。 ...并且从不为集合中的项调用修饰方法。 有没有一种方法可以让Mapstruct在集合映射中使用decorator方法,而不是在我的decorator中手动编写集合方法(这种方法很有效,但很冗长,并且违背了Mapstruct最初的目的,即不必编写这种代码)?

  • 问题内容: 由于重复的注释,以下代码无效: 但是,如何结合使用这两个注释? 问题答案: 至少有两个选项可以做到这一点: 以下http://www.blog.project13.pl/index.php/coding/1077/runwith-junit4-with-both-springjunit4classrunner-and-parameterized/ 您的测试需要看起来像这样: 有一个gi