簡體   English   中英

有沒有辦法使用 MapStruct 將 map 一個空字符串轉換為 null?

[英]Is there a way to map an empty String to null using MapStruct?

我在 Spring 引導應用程序中使用MapStruct將 DTO 映射到實體,反之亦然。

有沒有辦法使用 @Mapping 將 map 空字符串轉換為@Mapping

上面的答案是可能的。 我個人更喜歡這樣做更安全一些,也許更具聲明性。

@Mapper
public interface MyMapper {

    @Mapping( target = "s2",  qualifiedBy = EmptyStringToNull.class )
    Target map( Source source);

    @EmptyStringToNull
    default String emptyStringToNull(String s) {
        return s.isEmpty() ? null : s;
    }

    @Qualifier
    @java.lang.annotation.Target(ElementType.METHOD)
    @Retention(RetentionPolicy.CLASS)
    public @interface EmptyStringToNull {
    }

    class Source {

        private String s1;
        private String s2;

        public String getS1() {
            return s1;
        }

        public void setS1(String s1) {
            this.s1 = s1;
        }

        public String getS2() {
            return s2;
        }

        public void setS2(String s2) {
            this.s2 = s2;
        }
    }

    class Target {

        private String s1;
        private String s2;

        public String getS1() {
            return s1;
        }

        public void setS1(String s1) {
            this.s1 = s1;
        }

        public String getS2() {
            return s2;
        }

        public void setS2(String s2) {
            this.s2 = s2;
        }
    }
}


您可以根據需要多次重復使用EmptyStringToNull限定符,並且不依賴於參數名稱。

您可以簡單地使用@Mapping中的expression

@Mapping(target = "name", expression = "java(source.name.isEmpty() ? null : source.name)")
Dog convert(Cat source);

如果您希望它在映射器 class 中全局工作並攔截任何字符串映射,您可以簡單地實現以下內容:

default String mapEmptyString(String string) {
 string != null && !string.isEmpty() ? string : null;
}

這將 map 任何null或空String源到null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM