簡體   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