【问题标题】:mapstruct 1.3 can not get Enum as first method parametermapstruct 1.3 无法将 Enum 作为第一个方法参数
【发布时间】:2021-01-09 02:18:52
【问题描述】:

假设你有一个模型类,它只有一个 Enum 变量

public class MyModel {

  private MyEnum enum;
  //getter and setter

}

并且您想要一个映射器方法,它只映射您的单个 Enum。

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

    @BeanMapping(ignoreByDefault = true)
    @Mapping(source = "enum", target = "enum")
    MyModel toMyModel(MyEnum enum);

}

但遗憾的是,您会收到Can't generate mapping method from enum type to non-enum type 错误,这不在这里。因为它们都是同一个枚举。 (并且没有@valueMapping 也不起作用)

显然这是 mapstruct 错误!

我的解决方案

这可能很愚蠢,但它确实有效。您需要做的就是添加另一个方法参数(如虚拟字符串)作为第一个方法参数,然后将您的 Enum 作为第二个方法参数。你不需要映射你的虚拟字符串,让它在那里......

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

    @BeanMapping(ignoreByDefault = true)
    @Mapping(source = "enum", target = "enum")
    MyModel toMyModel(String dummy, MyEnum enum);

}

现在第一个方法参数不是枚举,所以 mapstruct 不会给你带来任何问题。 无论如何,如果有什么问题,我正在寻找更好的解决方案。

【问题讨论】:

  • 这是哪个版本的 MapStruct?
  • mapstruct 版本是 1.3.1 final @Filip

标签: java spring spring-boot enums mapstruct


【解决方案1】:

此错误仅存在于 MapStruct 1.3 中。从 MapStruct 1.4 开始,支持将 Enum 源参数映射到 Bean 中的属性。

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多