使用 mapstruct 从字符串到枚举

新手上路,请多包涵

我想使用 mapstruct 将 String 转换为枚举

enum TestEnum {
   NO("no");
   String code;

   TestEnum(String code) {
     this.code = code
   }

   public String getCode() {
    return code;
   }
}

我有一个从服务中获得的代码,我想将此代码转换为枚举如何通过 mapstruct 以更简单的方式完成

原文由 m.zemlyanoi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.6k
2 个回答

这是一个带有抽象映射器的解决方案,但是如果您愿意,可以使用默认方法或类来转换它

@Mapper
public abstract class TestMapper {

    abstract Source toSource(Target target);
    abstract Target totarget(Source source);

    String toString(TestEnum test){
        return test.getCode();
    }
    TestEnum toEnum(String code){
        for (TestEnum testEnum : TestEnum.values()) {
            if(testEnum.equals(code)){
                return testEnum;
            }
        }
        return null;
    }
}

public class Source {
    String value;
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

public class Target {
    TestEnum value;
    public TestEnum getValue() {
        return value;
    }
    public void setValue(TestEnum value) {
        this.value = value;
    }
}

原文由 Bertrand Cedric 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下代码对我有用。

 @Mappings({
        @Mapping(source = "genderDTO.name", target = "genderName")
})
GenderRecord dtoTogenderRecord(GenderDTO genderDTO);

  • “性别名称”是枚举
  • “genderDTO.name”是字符串

结果是:

 @Override
public GenderRecord dtoTogenderRecord(GenderDTO genderDTO) {
    if ( genderDTO == null ) {
        return null;
    }

    GenderRecord genderRecord = new GenderRecord();

    if ( genderDTO.getName() != null ) {
        genderRecord.setGenderName( Enum.valueOf( GenderType.class, genderDTO.getName() ) );
    }

    return genderRecord;
}

我还在接口级别使用以下内容来确保空检查:

 @Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)

原文由 jpCharger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题