Spring Webflux GraphQL应用游标分页ConnectionAdapter异常排查
GraphQL游标分页异常排查求助:No ConnectionAdapter for User实体
我在基于Webflux的响应式应用中实现了GraphQL控制器,原本运行正常。为了按照GraphQL官方标准添加游标分页,我参考Spring GraphQL 1.2.6文档,将Spring Boot版本升级至3.2.4,并完成了以下修改:
- 根查询从
users(count: Int, offset: Int, companyId: ID): [User]!修改为users(first:Int, after:String, last:Int, before:String, companyId: ID): UserConnection - 控制器方法调整为返回
Mono<Window<User>>,接收ScrollSubrange等参数 - 服务层与仓储层适配返回
Window<User>类型
调试过程中查询参数传递正常,但执行查询时抛出异常:
java.lang.IllegalStateException: No ConnectionAdapter for: com.tierra.suite.userservice.model.entity.user.User
异常发生在ConnectionFieldTypeVisitor.ConnectionDataFetcher#adaptDataContainer方法处。我已经提供了Window类的ConnectionAdapter,却仍出现该异常,希望得到排查方案。
相关代码片段
控制器代码
@QueryMapping public Mono<Window<User>> users(@Argument UUID companyId, ScrollSubrange subRange, @AuthenticationPrincipal Principal principal) { return userService.getUsers(principal, companyId, subRange, Sort.by("username")); }
服务层代码
public Mono<Window<User>> getUsers(@NotNull Principal principal, UUID companyId, ScrollSubrange subRange, Sort sort) { ScrollPosition position = subRange.position().orElse(ScrollPosition.offset()); Limit limit= Limit.of(subRange.count().orElse(100)); Objects.requireNonNull(principal); return visibilityService.findVisibleUsers(principal, User.class) .collectList() .flatMap(list -> userRepository.findByIdIn(list, position, limit, Sort.by("username"))); }
仓储层方法定义
Mono<Window<User>> findByIdIn(Collection<UUID> uuid, ScrollPosition position, Limit limit, Sort sort);
User实体类核心代码
@Data @NoArgsConstructor @AllArgsConstructor @Builder(toBuilder = true) @EqualsAndHashCode(callSuper = false) @Entity @Table(name="users") @JsonIgnoreProperties(ignoreUnknown = true) @SchemaMapping public class User extends X implements OAuthUser, Y, Persistable<UUID> { @Id private UUID id; private String username; // 其他字段... }
内容的提问来源于stack exchange,提问作者CptWasp
相关产品推荐
相关产品推荐

