考虑在配置中定义类型 'org.modelmapper.ModelMapper' 的 Bean



应用程序启动失败


在kodlama .io. dev .business. concretess . programminglanguagemanager中构造函数的参数1需要一个类型为'org.modelmapper '的bean。无法找到ModelMapper' .

考虑定义一个'org.modelmapper '类型的bean。


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);
}
}
}

我错过了一些东西,但我不知道是什么

您的ModelMapper类没有注册为spring bean,它只是一个普通的java类。为了解决这个问题,您需要创建一个@Configuration类,如果您想自动装配bean,它将定义bean。

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

否则,你不能使用spring依赖注入,你必须自己用new ModelMapper();创建对象

另一个技巧是避免用@Autowire注释字段。构造函数级别的注释就足够了。

从错误消息中可以清楚地看出bean of type 'org.modelmapper.ModelMapper'丢失了。因此,请将以下bean添加到您的项目中,然后再试一次。

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

注意:将此bean添加到带有@Configuration注释的类中。

我的应用程序工作没有@Configuration注释。所以我假设在Spring Boot v3.0.1不需要@Configuration注释。@SpringBootApplication注释在主类处理一切。您只需要上述答案中提到的@Been注释方法.

相关内容

最新更新