如何使用 Mapstruct 将枚举映射到字符串

new*_*ner 6 mapstruct

我可以在有字符串到枚举映射的地方找到答案,但我找不到如何将枚举映射到字符串。

public class Result {
  Value enumValue;
}

public enum Value {
   TEST,
   NO TEST
}


public class Person {
  String value;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能映射这个?

我试过 :

@Mapping(target = "value", source = "enumValue", qualifiedByName = "mapValue")


 @Named("mapValue")
    default Person mapValue(final Value en) {
        return Person.builder().value(en.name()).build();
    }
Run Code Online (Sandbox Code Playgroud)

Ben*_*eld 4

mapstruct 应该开箱即用地支持这一点。 所以@Mapping(target = "value", source = "enumValue")应该足够了。

包括目标/源类的完整示例:


@Mapper
public interface EnumMapper {
    @Mapping( target = "value", source = "enumValue" )
    Person map(Result source);
}

class Result {
    private Value enumValue;

    public Value getEnumValue() {
        return enumValue;
    }

    public void setEnumValue(Value enumValue) {
        this.enumValue = enumValue;
    }
}

enum Value {
    TEST, NO_TEST
}

class Person {
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下生成的代码:

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2022-02-20T12:33:00+0100",
    comments = "version: 1.5.0.Beta2, compiler: Eclipse JDT (IDE) 1.4.50.v20210914-1429, environment: Java 17.0.1 (Azul Systems, Inc.)"
)
public class EnumMapperImpl implements EnumMapper {

    @Override
    public Person map(Result source) {
        if ( source == null ) {
            return null;
        }

        Person person = new Person();

        if ( source.getEnumValue() != null ) {
            person.setValue( source.getEnumValue().name() );
        }

        return person;
    }
}
Run Code Online (Sandbox Code Playgroud)