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

使用Mapstruct映射DTO

魏风华
2023-03-14

我不熟悉Mapstruct,在特定用例中遇到问题

因此,如果我的来源属性hotmail.com我的目标属性应该收到“个人”,如果我的来源facebook.com我的目标应该收到“公司”。

我想用表达法,但没法绕过它。我该怎么做?

@Mapping(source = "user.email", target = "emailType")
 NewDTO myMapperMethod(MyRequest req);

共有2个答案

巢烨
2023-03-14

这不是MapSTRt应该为您解决的问题。它是根据内容做出运行时决策。通常是业务问题,而不是映射问题

赵永逸
2023-03-14

您可以使用qualifiedByName和default接口方法来限定和定义给定属性的适当映射方法:

@Mapper(componentModel = "spring")
public interface RequestMapper {

    @Mapping(source = "user.email", target = "emailType", qualifiedByName = "EmailToType")
    NewDTO myMapperMethod(MyRequest req);

    @Named("EmailToType")
    default String emailTypeResolver(String email) {
        if ("hotmail.com".equals(email)) {
            return "personal";
        } else if ("facebook.com".equals(email)) {
            return "corporate";
        } else {
            return "unknown";
        }
    }
}
 类似资料:
  • 我对这些技术是新的,所以提前道歉。 我在我的应用程序中使用了springboot、Spring JPA、hibernate和mapstruct。

  • 我想映射2个模型,其中每个模型都有几乎相同的枚举。让我展示: 第一个模型有枚举: 第二个模型具有枚举: 我有这样的自定义映射方法: 然后我用: 但是你可以得到: 我还创建了枚举映射器,如: 但我不需要单独设置,只希望枚举字段映射到内部映射中。简单地说,当我做枚举时,也应该映射。 谢谢 p、 对不起我的英语,希望我的问题有意义:)

  • 是否可能在MapStruct中使用不同的映射器?我有这个映射器 是否可以将此实现更改为MapStruct?

  • 按照第二个链接中包含的示例,我已经测试了: 但我没有实现使用。

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 下面的例子中,我有一个单独的域层和一个单独的持久层。我使用Mapstruct进行映射,当从域映射到实体或从实体映射到域时,会出现堆栈溢出,因为双向引用总是被调用- 用于映射的类非常基本