Springboot 3.2.1(Jetty)与graphql-spqr-spring-boot-starter兼容问题求助
Spring Boot 3.2.1(Jetty容器)升级后GraphQL请求报错问题
将Spring Boot升级至3.2.1版本(使用Jetty容器)后,访问/graphql接口时出现如下错误:
2024-01-04T17:31:09,780 WARN qtp666678445-176 org.eclipse.jetty.ee10.servlet.ServletChannel - /graphql jakarta.servlet.ServletException: Request processing failed: java.lang.IllegalStateException: Cannot resolve parameter names for constructor public io.leangen.graphql.spqr.spring.web.dto.GraphQLRequest(java.lang.String,java.lang.String,java.lang.String,java.util.Map) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1022) ~[spring-webmvc-6.1.2.jar:6.1.2] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.1.2.jar:6.1.2] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547) ~[jakarta.servlet-api-6.0.0.jar:6.0.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.2.jar:6.1.2] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) ~[jakarta.servlet-api-6.0.0.jar:6.0.0] at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.websocket.servlet.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:195) ~[jetty-ee10-websocket-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109) ~[spring-web-6.1.2.jar:6.1.2] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.2.jar:6.1.2] at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.2.jar:6.1.2] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.2.jar:6.1.2] at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547) ~[jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:797) [jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:428) [jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464) [jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:571) [jetty-security-12.0.5.jar:12.0.5] at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:703) [jetty-ee10-servlet-12.0.5.jar:12.0.5] at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:761) [jetty-server-12.0.5.jar:12.0.5] at org.eclipse.jetty.server.Server.handle(Server.java:179) [jetty-server-12.0.5.jar:12.0.5] at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:594) [jetty-server-12.0.5.jar:12.0.5] at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:424) [jetty-server-12.0.5.jar:12.0.5] at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322) [jetty-io-12.0.5.jar:12.0.5] at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99) [jetty-io-12.0.5.jar:12.0.5] at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53) [jetty-io-12.0.5.jar:12.0.5] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:971) [jetty-util-12.0.5.jar:12.0.5] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1201) [jetty-util-12.0.5.jar:12.0.5] at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1156) [jetty-util-12.0.5.jar:12.0.5] at java.base/java.lang.Thread.run(Thread.java:833) [?:?]
疑问
- 该如何解决此问题?
- graphql-spqr-spring-boot-starter:1.0.0是否仅兼容旧版本Spring Boot?
更新1
经排查,为graphql-spqr-spring-boot-starter项目添加编译器参数-parameters重新编译后,问题已解决。具体操作是在项目pom.xml的maven-compiler-plugin节点下添加如下配置:
<compilerArgs> <arg>-parameters</arg> </compilerArgs>
后续疑问
- 能否发布一个小版本修复该问题?
- 是否有其他方式避免参数名自省?
注:Spring Framework 6.x升级文档中明确了参数名保留相关的变更,这是导致该问题的核心背景。
内容的提问来源于stack exchange,提问作者Amit Jolly
相关产品推荐
相关产品推荐

