如何使用MapStruct 1.2有条件地映射属性?

时间:2018-03-02 11:06:14

标签: mapping conditional mapstruct

MapStruct 1.2是否可以将具有特定值的源属性映射到目标中的特定不同值?

我想到这样的事情:

public abstract class JiraKpmMapper {
    @Mappings({
    @Mapping(source = "mySource.propA", target = "myTarget.propX")
    })
    @ValueMappings({
        @ValueMapping(source = "ABC", target = "XYZ"),
        @ValueMapping(source = "123", target = "789")
    })
    public abstract MyTarget source2Target(final MySource mySource);

}

因此,当MapStruct在映射期间看到mySource.propA具有值" ABC" myTarget.propX需要设置为值" XYZ"等等。

更确切地说,我甚至想要更详细的内容: 目标应该是一个避开三个属性的类别,其中必须将得到的目标值拆分成。 例如,如果mySource.propA的值为" ABC"目标myTarget应该得到类似" V01.123.456.AB"的值。该值又应分为preValue,middleValue和endValue:

preValue =" V01"

middleValue =" 123.456"

endValue =" AB"

因此没有包含完整结果字符串的属性。

这就是为什么我已经写了一个自定义映射器,并告诉MyMapper通过

使用它
@Mapper(componentModel = "spring", uses = MyCustomMapper.class)

到目前为止这是有效的,但我无法告诉MyCustomMapper放置" V01.123.456.AB"当souzrce带来" ABC"。

时进入目标

1 个答案:

答案 0 :(得分:3)

您可以这样做

@Mapping(target = "myTarget.propX",expression="java(mySource.getPropA().equals(\"Abc\")?"\"V01.123.456.AB\":\"\")")
相关问题