"Mapstruct" Есть ли способ сопоставить пустую строку с нулем, используя mapstruct? - PullRequest
0 голосов
/ 16 апреля 2020

Я использую mapstruct для отображения Dto на Entity и наоборот в моем весеннем загрузчике приложении.

Я хочу знать, есть ли способ, которым я могу отобразить, если любое значение String, поступающее как пусто , в null значение с помощью mapstruct @ Mapping () ?

Возможно ли это?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Ответ выше возможен. Лично я предпочитаю делать это немного безопаснее и, возможно, немного более декларативно.

@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 столько раз, сколько захотите, и вы не будете зависеть от имя параметра.

1 голос
/ 18 апреля 2020

Вы можете просто использовать expression в пределах @Mapping

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