java报错“ NoSuchMethodError:com.test.Service.doRoomList(Ljava/lang/String;)V解决方案
找到报错的具体类和方法名:
Handler dispatch failed; nested exception is java.lang.NoSuchMethodError:
com.test.Service.doRoomList(Ljava/lang/String;)V
比如,原来代码是
public void doRoomList(String param){System.out.println("hello world" + param);
}
改造后是
public void doRoomList(Integer param){System.out.println("hello world" + param);
}
最常见的原因:Service.doRoomList(String)
方法找不到。原来的方法doRoomList(String params)
是String类型被改成了Integer类型,重新运行代码时编译的.class还是旧的String类导致报错。
即使方法名相同,如果参数类型、数量或返回类型不同,JVM 也会认为是“找不到方法”。
解决方法:重新编译代码,操作IDE上build或clean
mvn clean compile
如果不是自己的编写的类报错而是引入工具类jar包报错,则项目在引入多个版本的工具包冲突报错了。
例如报错如下:
NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readValue(Ljava/lang/String;Lcom/fasterxml/jackson/core/TypeReference;)Ljava/lang/Object;
说明:ObjectMapper.readValue(String, TypeReference)
找不到。
原因: 使用的是 Jackson 2.10+ 的 API,但运行时是 Jackson 2.6。
解决: 统一引入包的版本。保持最新版移除旧版本,然后重新编译代码
<!-- dependency --><!-- groupId>com.fasterxml.jackson.core</groupId --><!-- artifactId>jackson-databind</artifactId --><!-- version>2.6.2</version -->
<!-- /dependency --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.3</version> <!-- 统一版本 -->
</dependency>
最后通过 mvn dependency:tree
查看确保没有旧版本被间接引入。