繁体   English   中英

不带参数的mapstructqualifiedByName简化表达式

[英]mapstruct qualifiedByName without parameters simplify expression

我想在字段上设置一个常量,但是通过方法调用,我不想创建一个看起来很糟糕的表达式,我想简化这个调用

 @Mapping(target = "channelNotification", expression= "java(new ChannelNotification[]{ " +
                "new ChannelNotification(\"email\", 10)})")

得到这样的东西:

 @Mapping(target = "channel", qualifiedByName = "getChannel")
    Notification convert(Email emailEntity);

 @Named("getChannel")
    default Channel[] getChannel() {//with empty params
        return new Channel[]{new Channel("email", 10)};
    }

源实体没有字段channelNotification,我不需要使用它。 我只想设置一个常量,如常量 = *,但使用方法调用

目前这是不可能的。 但是,您可以做的是结合使用constantqualifiedByName

例如

    @Mapping(target = "channel", constant = "email" qualifiedByName = "getChannel")
    Notification convert(Email emailEntity);

    @Named("getChannel")
    default Channel[] getChannel(String channelType) {
        Channel channel;
        if ("email".equals(channelType)) {
            channel = new Channel("email", 10);
        } else {
            throw new IllegalArgumentException("unknown channel type " + channelType);
        }

        return new Channel[]{channel};
    }

鲜为人知的是, constant与限定符的工作方式与其他Mapping#source类似。 从 1.4 开始,将查找Stringconstant中的内容)和目标类型之间的自定义映射,以便转换常量值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM