【发布时间】:2021-04-23 15:30:38
【问题描述】:
我使用 spring boot 在 java 中创建了一个 REST API,但是当我尝试运行它时,我得到一些错误,它已经将一个方法从一个控制器类映射到 get 方法,它不能映射另一个即使他们有不同的名字。例如:/drugs/filtered/{amount} 和 /drugs/report
这是代码
@RestController
@AllArgsConstructor
public class DrugController {
private DrugService service;
private DrugConverter drugConverter;
@RequestMapping(name = "/drugs", method = RequestMethod.POST)
public DrugDTO handleAddDrug(@RequestBody DrugDTO dto) {
Drug addedDrug = service.addDrug(
dto.getId(),
dto.getName(),
dto.getRecommendedAmount());
return drugConverter.convertModelToDto(addedDrug);
}
@RequestMapping(name = "/drugs", method = RequestMethod.PUT)
public DrugDTO handleUpdateDrug(@RequestBody DrugDTO dto) {
Drug updated = service.updateDrug(
dto.getId(),
dto.getName(),
dto.getRecommendedAmount());
return drugConverter.convertModelToDto(updated);
}
@RequestMapping(name = "/drugs/{id}", method = RequestMethod.DELETE)
public DrugDTO handleDeleteDrug(@PathVariable Integer id) {
Drug deletedDrug = service.deleteDrug(id);
return drugConverter.convertModelToDto(deletedDrug);
}
@GetMapping(name = "/drugs/{id}")
public DrugDTO handleGetDrug(@PathVariable Integer id) {
Drug drug = service.getDrug(id);
return drugConverter.convertModelToDto(drug);
}
@GetMapping(name = "/drugs")
public DrugsDTO handleGetAllDrugs() {
Collection<Drug> drugs = service.getAllDrugs();
return new DrugsDTO(drugs.stream().map(drugConverter::convertModelToDto).collect(Collectors.toSet()));
}
@GetMapping(name = "/drugs/filtered/{amount}")
public DrugsDTO handleGetDrugsWithDoseBiggerThan(@PathVariable Integer amount) {
Collection<Drug> drugs = service.getDrugsWithDoseBiggerThan(amount);
return new DrugsDTO(drugs.stream().map(drugConverter::convertModelToDto).collect(Collectors.toSet()));
}
@GetMapping(name = "/drugs/report")
public DrugsDTO handleGetDrugsWithDosesOf() {
Collection<Drug> drugs = service.getDrugsWithDosesOf();
return new DrugsDTO(drugs.stream().map(drugConverter::convertModelToDto).collect(Collectors.toSet()));
}
}
这是错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'drugController' method BloodManagement.ServerSide.Controller.DrugController#handleGetDrug(Integer) to {GET []}: There is already 'drugController' bean method BloodManagement.ServerSide.Controller.DrugController#handleGetAllDrugs() mapped.
【问题讨论】:
标签: java spring spring-boot rest