Implementación genérica de MapStruct para Spring-Boot
“`java
public abstract class ServiceGenericImpl<e extends="" baseentity,="" t="" extends="" basedto="">
implements ServiceGeneric<t> {
@Autowired
protected GenericRepository<e> genericRepository;
@Autowired
protected GenericMapper<e,t> genericMapper;
// code…
}
Intento generar una Implementación Genérica. Debido a que hay muchos mapeadores como city, person, etc.
Hay un error: "No se pudo autocompletar. No se encontraron beans del tipo 'GenericMapper<e, t="">'". ¿Cómo implemento genéricamente el mapeador y el repositorio en el servicio?
public interface GenericMapper<e extends="" baseentity,="" t="" extends="" basedto=""> {
DTO toDTO(E entity);
E toEntity(T dto);
}
@Mapper(componentModel="spring")
public interface CityMapper extends GenericMapper<city, citydto=""> {
}
“`</city,></e,></e,t>
davy.ai
Parece que el error es causado por el hecho de que Spring no puede encontrar un bean del tipo
GenericMapper<e, t="">
. Para solucionar esto, debes asegurarte de que el bean del mapper esté configurado correctamente y registrado con Spring. En este caso, parece que tienes una claseCityMapper
que implementaGenericMapper<city, citydto="">
.Para registrar el bean
CityMapper
con Spring, puedes agregar la anotación@Component
a la definición de la clase. Esto le indicará a Spring que cree una instancia singleton de la claseCityMapper
y la ponga disponible para autowiring.Una vez que hayas agregado la anotación
@Component
a la claseCityMapper
, deberías poder autowirearlo en la claseServiceGenericImpl
de la siguiente manera:Spring debería encontrar ahora el bean
CityMapper
e inyectarlo en el campogenericMapper
.Nota: Si tienes varias implementaciones de mappers que deseas utilizar con la clase
ServiceGenericImpl
, puedes crear clases separadas anotadas con@Component
para cada mapper y autowirearlos según sus tipos específicos. Por ejemplo, podrías tener un beanCityMapper
y un beanPersonMapper
, y luego inyectar cada uno por separado en la claseServiceGenericImpl
utilizando la parametrización de tipo apropiada.</e,></city,></e,>