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里启动就不报错了。

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

 

四、好像没什么关系的知识点

kotlin的默认参数方法使用@JvmOverloads可以将方法重载成多个java方法

1 @JvmOverloads fun A(a: Int, b: Int = 0) {
2   ……    
3 }
4 会变成
5 
6 public void A(int a) {}
7 public void A(int a, int b) {}

kotlin文档:https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html

 

转载于:https://www.cnblogs.com/Nelofie/p/8945572.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值