kotlin springmvc项目运行时报错 "There is already 'XXX' bean method"

---恢复内容开始---

一、问题

项目中有一个controller类,有一个searchById方法,其中isLocal是个默认值为false的boolean参数,用来判断连接本地还是线上数据库。

 1 @Controller
 2 @RequestMapping("api/case_info")
 3 class DocEditAction {
 4     ……
 5 
 6     @ResponseBody
 7     @RequestMapping(value = ["search"], method = [RequestMethod.GET])
 8     fun searchById(id: String, isLocal: Boolean = false): AnalyzeJson {
 9       …………
10     }    
11 
12 }

项目打成war包放到tomcat上运行时报错,报错信息如下:

public final XXX.AnalyzeJson XXX.DocEditAction.searchById(java.lang.String,boolean)
to {[/api/case_info/search],methods=[GET]}: There is already 'docEditAction' bean method
public static XXX.AnalyzeJson XXX.DocEditAction.searchById$default(XXX.DocEditAction,java.lang.String,boolean,int,java.lang.Object) mapped.
15:24:41 [http-nio-8660-exec-1] ERROR org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:502)- Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'docEditAction' method 
public final XXX.AnalyzeJson XXX.DocEditAction.searchById(java.lang.String,boolean)
to {[/api/case_info/search],methods=[GET]}: There is already 'docEditAction' bean method

奇怪的是,这样的controller里的带默认参数的方法有好几个,以前也没有报过错。这期间发生的可能有关的变更有:

1.一个老哥写了个拦截器,处理了一下所有接收到的请求,“requestMappingHandlerMapping”就是新增加的一个bean

2.kotlin版本从1.2.30升级到了1.2.40

二、原因

没有找到根本的原因,推测是老哥写的拦截器那边有问题

三、解决方案

把方法里面的带默认值的参数写在了方法里面,之后重新打包丢到tomcat里启动就不报错了。

虽然感觉没有解决根本上的问题。

猜你喜欢

转载自www.cnblogs.com/Nelofie/p/8945572.html
今日推荐