Mapstruct 可选映射

Mapstruct optional mapping

我想知道如何使用 mapstruct 更改此 mapping 以避免 nullPointer 异常。 rep.getClientLevelType() 可以为空,也可以是 DIRECTRELATED。当fromValuenullempty.string上执行时,出现空指针异常。 我不知道该怎么做,只有在 rep.getClientLevelType() 不为 null 使用 mapstruct.

时才会出现此字段
@Mapping(target = "clientLevelType", expression = "java(ClientLevelType.fromValue(rep.getClientLevelType()))")

从 wsdl 生成的枚举文档:

@XmlType(name = "ClientLevelType")
@XmlEnum
public enum ClientLevelType {

    DIRECT,
    RELATED;

    public String value() {
        return name();
    }

    public static ClientLevelType fromValue(String v) {
        return valueOf(v);
    }    
}

WSDL:

   <xs:simpleType name="ClientLevelType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="DIRECT"/>
            <xs:enumeration value="RELATED"/>
        </xs:restriction>
    </xs:simpleType>

String 转换为 enum 可以通过 mapstruct 隐式完成,请参阅文档中的 implicit type conversions

因此,无需添加 expression,只需添加 source,或者当字段名称匹配时,您甚至可以将其省略,然后 MapStruct 将自动检测映射。