es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , ,

Answer

  1. Avatar for 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 clase CityMapper que implementa GenericMapper<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 clase CityMapper y la ponga disponible para autowiring.

    Una vez que hayas agregado la anotación @Component a la clase CityMapper, deberías poder autowirearlo en la clase ServiceGenericImpl de la siguiente manera:

    @Autowired
    protected GenericMapper<e, t=""> genericMapper;
    

    Spring debería encontrar ahora el bean CityMapper e inyectarlo en el campo genericMapper.

    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 bean CityMapper y un bean PersonMapper, y luego inyectar cada uno por separado en la clase ServiceGenericImpl utilizando la parametrización de tipo apropiada.</e,></city,></e,>

Comments are closed.