把我的头发拉出来,完全没有意义
@RestController("/firmwareAShkcwdsdskl")
public class FirmwareController {
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Result> createNewFirmwareVersion(DetailedFirmwareVersionRequest detailedFirmwareVersionRequest) {
// Code Block
}
}
@RestController("/jobs/firmwareUpgrade")
public class FirmwareUpgradeController {
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Result> createNewJob(DetailedFirmwareUpgradeRequest detailedFirmwareUpgradeRequest) {
// Code Block
}
}
尝试使用这两个 Controller 启动我的 Spring Boot 应用程序会引发以下错误
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map '/jobs/firmwareUpgrade' method
eshepherd.admin.api.controller.FirmwareUpgradeController#createNewJob(DetailedFirmwareUpgradeRequest)
to {POST , produces [application/json]}: There is already '/firmwareAShkcwdsdskl' bean method
eshepherd.admin.api.controller.FirmwareController#createNewFirmwareVersion(DetailedFirmwareVersionRequest) mapped.
类名、方法名、请求映射和参数都是唯一的,我就是看不懂。
正如你所知,我已经陷入了纯粹的挫败感,试图尝试各种字符串更改以使其最初正常工作,但如果有人可以帮助我找出问题,我将非常感激。
编辑:使用 Spring-Boot 2.2.4
最佳答案
正如您在自己的回答中提到的:是的,您误解了。这是一个容易混淆的问题。
@RestController
的值是组件名称,而不是请求映射路径。查看 org.springframework.web.bind.annotation.RestController#value 的源代码。
与 org.springframework.stereotype.Component#value
非常相似以及 org.springframework.stereotype
中的其他人(在 spring-context 中)。您现在已经有了正确的注释:
@RestController
@RequestMapping("/firmware")
public class FirmwareRestController {
// ...
}
关于java - Spring Boot - 不明确的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60291037/