Tengo un booleano definido por 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;
     }

}

Sabemos que este booleano nunca debe ser nulo, esto está siendo utilizado en algunos mapeadores por mapstruct

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

Y luego cambio todos los lugares donde tengo booleano a booleano, ejecuto mi aplicación y arroja un NoSuchMethodError:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: MyClassWithMyVar.getMyVar()Ljava/lang/Boolean;
0
vmrvictor 16 oct. 2018 a las 11:27

2 respuestas

La mejor respuesta

Mapstruct sigue la especificación JavaBeans y la especificación JavaBeans http : //download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/ dice que:

para propiedades booleanas, permitimos que un método getter coincida con el patrón: public boolean is<PropertyName>();

Se debe usar para boolean (tipo primitivo) cuando queremos devolver objetos, entonces usamos getX () por ejemplo para boolean getMyBoolean ().

1
vmrvictor 16 oct. 2018 a las 08:27

Puede crear su propio método en mapstruct. Ejemplo de conversión a continuación

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

En Mapstruct Prueba esto

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

}

1
Faizan Ahmad 19 ago. 2019 a las 12:40