执行Spring Boot接口调用代码时遭遇GraphQL的java.lang.NoSuchMethodError异常
问题描述
执行代码时遭遇GraphQL相关的java.lang.NoSuchMethodError异常,尽管REST API能正常返回响应,但代码仍抛出该错误。
相关配置与代码
pom.xml 内容
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth2</artifactId> <version>2.5.2.RELEASE</version> </dependency>
Java 代码
业务逻辑实现
public RefundOrderDetailsResponse getRefundOrderDetails(String employeeId, String orderId) { UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(refundOrderDetailsUrl) .queryParam("employeeId", employeeId) .queryParam("orderId", orderId); ResponseEntity<RefundOrderDetailsResponse> response = restTemplate.getForEntity(builder.toUriString(), RefundOrderDetailsResponse.class); return response.getBody(); }
DTO 定义
package com.octanner.commerceconfig.dto.refundorder; import lombok.Data; @Data public class RefundOrderDetailsResponse { private String employeeId; private String firstName; private String lastName; private String orderId; private Double pointBalance; private String orderStatus; private boolean refundable; }
问题分析与解决方案
java.lang.NoSuchMethodError本质是依赖版本不兼容:编译时存在的方法,运行时因依赖冲突找不到对应的类或方法。结合你的配置来看:
- Spring Boot 3.1.2基于Spring Framework 6.x,而
spring-security-oauth2:2.5.2.RELEASE是适配Spring Framework 5.x的旧版本,两者核心依赖存在版本冲突。 - 异常关联GraphQL,说明项目中GraphQL相关依赖也可能与Spring Boot 3.x或旧OAuth2依赖存在版本不匹配,导致方法缺失。
解决步骤:
- 替换OAuth2依赖:Spring Boot 3.x需使用官方提供的OAuth2 starter,自动对齐版本,移除旧的
spring-security-oauth2依赖:
<!-- 根据业务需求选择客户端或资源服务依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <!-- 或者 --> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency> -->
- 对齐GraphQL依赖版本:如果使用GraphQL,改用
spring-boot-starter-graphqlstarter,无需手动指定版本,由Spring Boot parent统一管理:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-graphql</artifactId> </dependency>
- 清理依赖缓存:执行
mvn clean install清理本地仓库中可能存在的冲突依赖,重新构建项目。 - 定位具体冲突:如果以上步骤无效,查看异常堆栈中缺失方法的所属类,精准排查是哪个依赖的版本问题,针对性调整版本号。
内容的提问来源于stack exchange,提问作者yalamarthi lakshmi priyanka
相关产品推荐
相关产品推荐

