在开发 Spring Boot 应用时,遇到 Ambiguous mapping
错误是一个常见的问题。这种错误通常发生在多个控制器方法映射到相同的 URL 路径时。Spring MVC 在启动时会根据 URL 路径将 HTTP 请求映射到对应的控制器方法,如果多个方法映射到同一个路径,Spring 就会抛出 IllegalStateException
,提示映射冲突。
遇到的错误:
错误分析
从错误信息中可以看到,Spring Boot 在初始化时出现了 IllegalStateException
,并且明确指出了问题:Ambiguous mapping
。这意味着在你的项目中有两个方法映射到了相同的 URL 路径 {POST /pmPc/field}
,导致了冲突。具体是:
com.kakarote.pm.controller.PmPcController#queryReceivablesField(String)
com.kakarote.pm.controller.PmCheckController#queryReceivablesField(String)
两个方法的路径都是 /pmPc/field
,而且都是使用 @PostMapping
注解标注的 POST 请求。
Spring MVC 会根据请求的 URL 路径和 HTTP 方法(如 GET、POST 等)来映射对应的控制器方法。如果多个方法映射到相同的 URL 路径并且使用相同的 HTTP 方法,Spring 就无法决定应该调用哪个方法,从而抛出 Ambiguous mapping
错误。
结果我查看发现这个地方的地址忘记修改了导致重复映射了,因此启动的时候才会爆这个错误
解决方案:
1. 修改 URL 路径
最直接的解决办法就是修改其中一个方法的 URL 路径,确保它们不会冲突。例如:
这是针对我自己的方法,其实要求都是一样的只要映射不同就可以了。
2. 检查是否有重复的映射
有时候我们会无意中为多个方法指定了相同的 URL 路径。检查一下你的代码,看看是否有类似的重复映射,确保每个 URL 路径都是唯一的。如果不需要为这两个方法提供相同的路径,只需调整其中一个的方法注解即可。
总结
Ambiguous mapping
错误的发生通常是因为多个方法映射到了相同的 URL 路径。在开发中,我们应该避免重复映射,确保每个 URL 路径映射到唯一的控制器方法。通过合理地调整方法的 URL 路径,可以轻松解决该问题。
希望本文能帮助你理解并解决 Ambiguous mapping
错误。如果你在开发过程中遇到类似问题,可以参考本文的解决方案进行排查和修复。