Изменение логического значения на логическое выдает noSuchMethodError в MapStruct - PullRequest
0 голосов
/ 16 октября 2018

У меня есть логическое значение, определенное как hibernate

public class MyClassWithMyVar {

     @Column(name="myVar", nullable=false)
     private Boolean myVar;

     public Boolean getMyVar(){
         return myVar;
     }

     public void setMyVar(Boolean myVar){
         this.myVar=myVar;
     }

}

мы знаем, что этот логический аргумент никогда не должен быть нулевым, он используется в некоторых картографах mapstruct

@Mapper
@Mappings({@Mapping(target = "id", ignore =true)})
abstract MyClassWithMyVar copyMyClassWithMyVar(MyClassWithMyVar myClassWithMyVar);

, а затемЯ меняю все места, где у меня есть логическое значение, на логическое, запускаю свое приложение и выдает ошибку NoSuchMethodError:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: MyClassWithMyVar.getMyVar()Ljava/lang/Boolean;

Ответы [ 2 ]

0 голосов
/ 19 августа 2019

Вы можете создать свой собственный метод в mapstruct.Пример ниже для преобразования

class Entity{
Boolean x;
};
class DTOEntity{
boolean z;
}

В Mapstruct Попробуйте это

@Mapping(target = "z", source = "x", qualifiedByName="getBoolean")
DTOEntity entityToDto(Entity entity);
@Named("getBoolean")
default boolean getBoolean(Boolean x) {
    return  (boolean) x;
}

}

0 голосов
/ 16 октября 2018

mapstruct соответствует спецификации JavaBeans, а спецификация JavaBeans http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/ говорит, что:

для логических свойств, мы разрешаем методу getter соответствовать шаблону: public boolean is<PropertyName>();

is должен использоваться для логического (примитивного типа), когда мы хотим вернуть объекты, тогда мы используем getX (), например, для Boolean getMyBoolean ().

...