Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Consider defining a bean of type 'org.modelmapper.ModelMapper' in your configuration

APPLICATION FAILED TO START


Parameter 1 of constructor in Kodlama.io.Devs.business.concretes.ProgrammingLanguageManager required a bean of type ‘org.modelmapper.ModelMapper’ that could not be found.

Consider defining a bean of type ‘org.modelmapper.ModelMapper’ in your configuration.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel


ProgrammingLanguageManager

@Service
public class ProgrammingLanguageManager implements ProgrammingLanguageService {

    @Autowired
    private ProgrammingLanguageRepository programmingLanguageRepository;
    private ModelMapper modelMapper;

    @Autowired
    public ProgrammingLanguageManager(ProgrammingLanguageRepository programmingLanguageRepository,
            ModelMapper modelMapper) {
        this.programmingLanguageRepository = programmingLanguageRepository;
        this.modelMapper = modelMapper;

    }

    // * * * CRUD OPERATIONS * * *

    @Override
    public CreateProgrammingLanguageResponse add(CreateProgrammingLanguageRequest createProgrammingLanguageRequest)
            throws Exception {
        nameCannotBeSame(createProgrammingLanguageRequest.getName());

        ProgrammingLanguage programmingLanguage = modelMapper.map(createProgrammingLanguageRequest,
                ProgrammingLanguage.class);
        ProgrammingLanguage saveProgrammingLanguageResult = programmingLanguageRepository.save(programmingLanguage);

        CreateProgrammingLanguageResponse createProgrammingLanguageResponse = modelMapper
                .map(saveProgrammingLanguageResult, CreateProgrammingLanguageResponse.class);

        return createProgrammingLanguageResponse;
    }

    @Override
    public UpdateProgrammingLanguageResponse update(UpdateProgrammingLanguageRequest updateProgrammingLanguageRequest)
            throws Exception {
        nameCannotBeSame(updateProgrammingLanguageRequest.getName());

        ProgrammingLanguage programmingLanguage = modelMapper.map(updateProgrammingLanguageRequest,
                ProgrammingLanguage.class);
        ProgrammingLanguage saveProgrammingLanguageResult = programmingLanguageRepository.save(programmingLanguage);

        UpdateProgrammingLanguageResponse updateProgrammingLanguageResponse = modelMapper
                .map(saveProgrammingLanguageResult, UpdateProgrammingLanguageResponse.class);

        return updateProgrammingLanguageResponse;
    }

    @Override
    public DeleteProgrammingLanguageResponse delete(DeleteProgrammingLanguageRequest deleteProgrammingLanguageRequest) {

        ProgrammingLanguage getReferenceByIdProgrammingLanguageResult = programmingLanguageRepository
                .getReferenceById(deleteProgrammingLanguageRequest.getId());
        programmingLanguageRepository.delete(getReferenceByIdProgrammingLanguageResult);

        DeleteProgrammingLanguageResponse deleteProgrammingLanguageResponse = modelMapper
                .map(getReferenceByIdProgrammingLanguageResult, DeleteProgrammingLanguageResponse.class);

        return deleteProgrammingLanguageResponse;
    }

    // * * * GET METHODS * * *

    @Override
    public List<GetAllProgrammingLanguagesResponse> getAll() {

        List<ProgrammingLanguage> findAllProgrammingLanguageResult = programmingLanguageRepository.findAll();

        return modelMapper.map(findAllProgrammingLanguageResult,
                new TypeToken<List<GetAllProgrammingLanguagesResponse>>() {
                }.getType());
    }

    @Override
    public GetByIdProgrammingLanguageResponse getById(
            GetByIdProgrammingLanguageRequest getByIdProgrammingLanguageRequest) {

        ProgrammingLanguage getReferenceByIdProgrammingLanguageResult = programmingLanguageRepository
                .getReferenceById(getByIdProgrammingLanguageRequest.getId());

        GetByIdProgrammingLanguageResponse getByIdProgrammingLanguageResponse = modelMapper
                .map(getReferenceByIdProgrammingLanguageResult, GetByIdProgrammingLanguageResponse.class);

        return getByIdProgrammingLanguageResponse;
    }

    public GetByNameProgrammingLanguageResponse getByName(
            GetByNameProgrammingLanguageRequest getByNameProgrammingLanguageRequest) {

        ProgrammingLanguage getReferenceByNameProgrammingLanguageResult = new ProgrammingLanguage();
        getReferenceByNameProgrammingLanguageResult = programmingLanguageRepository
                .getByName(getByNameProgrammingLanguageRequest.toString());

        GetByNameProgrammingLanguageResponse getByNameProgrammingLanguageResponse = modelMapper
                .map(getReferenceByNameProgrammingLanguageResult, GetByNameProgrammingLanguageResponse.class);

        return getByNameProgrammingLanguageResponse;
    }

    // * * * BUSINESS RULES * * *

    private void nameCannotBeSame(String name) throws Exception {

        ProgrammingLanguage programmingLanguage = programmingLanguageRepository.getByName(name);

        var result = programmingLanguage;

        if (result != null) {
            throw new Exception(Messages.NAME_ALREADY_EXISTS);
        }
    }
}

Im missing something but i don’t know what

>Solution :

Your ModelMapper class is not registered as spring bean, it is just a normal java class.
In order to fix that, you need to create a @Configuration class that will define the bean if you’d like to autowire it.

@Configuration
public class AppConfiguration {
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
} 

Otherwise, you cannot you spring dependency injection and you would have to create the object yourself with new ModelMapper();

Another tip is to avoid annotating fields with @Autowire. Constructor level annotation is enough.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading