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

Mapstruct将枚举名称映射到代码,反之亦然

裘兴思
2023-03-14

拥有Maapstruct映射接口和带有各种枚举的DTO。我有两个不同的枚举,它们的格式都是:

public enum TxAccTypeDto  {
    FINANCE("Finance")
}

public enum TxStatusDto  {
    PENDING("Pending"),
}

public enum TxStatusDto  {
    PENDING("Pending"),
}

public enum ContactMethod {
    TELEPHONE,
 default TxAccTypeDto toEnum(final String code) {
    return Arrays.stream(TxAccTypeDto.values()).filter(
            testEnum -> testEnum.getCode().equals(code))
            .findFirst()
            .orElse(null);
}

但它显然不知道要用参数字符串代码映射到的枚举。希望我能:

  1. 只做toEntity(fromDto)和toDto(fromStringCode,forDtoTypeAndFile)
  2. 只为每个类型添加代码,而不为每个源/目标添加代码

共有1个答案

柯栋
2023-03-14

这篇文章很有帮助:将自定义方法映射器映射到Mapstruct

但意味着指定限定符/单个映射。希望它按类型做,并描述一次映射。注意问题来自StringToEnum,两者都有单个字符串param,所以不合格

@Mappings({
  @Mapping(source = "sourceAccountType", target = "sourceAccountType", qualifiedByName = "txAccTypeDto"),
  @Mapping(source = "targetAccountType", target = "targetAccountType", qualifiedByName = "txAccTypeDto"),
  @Mapping(source = "transactionStatus", target = "transactionStatus", qualifiedByName = "txStatusDto"),
})
 类似资料:
  • 我使用Mapstruct来处理将一个POJO映射到另一个POJO的样板代码。 以下是DTO: 这是映射的POJO: 我正在寻找一种优雅的方法来处理和之间的映射。目前,我正在使用注释的属性。由于引用了我使用的是“周期映射”示例中的。 该界面还包含一个方法映射到,名称为。 有没有更优雅的方法来实现将不可编辑的转换为?我的方法可行,但也有缺点。例如,重构不能识别字符串中的代码片段。

  • 我提到了用Mapstruct将多个源字段映射到同一类型目标字段的问题,但这没有帮助 我的rest资源类如下所示 我的实体类是源代码,如下所示: 我想在mapper类中用emailAdddress或devices或mobileNumbers映射源类中的地址,我尝试在mapper类中使用@AfterMapping和一个decorator类,但它没有帮助。 我有一个像这样的映射器类

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

  • 我有两个枚举类,一个是外部的,另一个是内部的。 我需要将内部映射到外部,外部映射到内部。所以我做了以下工作, 因此,相同类型的映射在两种方法中重复。难道没有一种很好的方法可以用更少的代码来实现这一点吗?

  • 问题内容: 假设我有这个枚举: 通过以下映射: 枚举被发送到数据库,,。我希望这些值改为存储为,或存储在varchar列中。 如何将枚举映射到varchar列? 问题答案: 将其添加为EnumType的参数: 这是因为等效于java.sql.Types.VARCHAR

  • 我有一个实体,有一个枚举类型字段和一个具有相同枚举类型和字段名的DTO。 我使用modelMapper创建一个新对象,不需要额外的配置。 但在将dto映射到实体对象后,实体对象上的性别为空。 对象有性别,我已经检查了很多。 请帮我理解这个问题。