java - Spring Boot - 不明确的映射

标签 java spring rest spring-boot

把我的头发拉出来,完全没有意义

@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/

相关文章:

java - JSTL - 如何在不影响服务器的情况下重置 `ModelAttribute`?

python - 使用 Azure 资源管理器 REST API

java - 将特定 bean 作为参数注入(inject)具有多个参数的函数中

java - 如何设置 JUnit 测试的日志级别

java - 命令行界面 : Choosing options from a list by character

java - 使用 spring-boot-maven-plugin 从独立 JAR 中排除 .xml 和属性

java - 如何使用 spring boot 抑制 url 编码

javascript - 使用 Express 和 HTTPS.get 或 HTTPS.request 的最佳方式

java - 为什么在 Java 中使用 RESTful 服务框架而不是普通 servlet

java - Spring Jdbc 的 Oracle Sql 函数返回类型