java—如何Map同一类中的两个不同方法以在SpringBoot中获取请求?

tvokkenx  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(282)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

昨天关门了。
改进这个问题
我用springboot在java中创建了一个restapi,但是当我尝试运行它时,我得到了一个错误,它已经将一个方法从一个控制器类Map到get方法,并且它不能Map另一个方法,即使它们有不同的名称。前任: /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.

zmeyuzjn

zmeyuzjn1#

尝试在所有Map中将参数名称更改为value。
即。:

@GetMapping(name = "/drugs")

变成

@GetMapping(value = "/drugs")

相关问题