You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring WebFlux集成Sentry遭遇NoSuchMethodError问题求助

问题:Spring WebFlux集成Sentry出现NoSuchMethodError: ServerHttpResponse.getRawStatusCode()

我在Spring WebFlux应用中集成Sentry做错误追踪时遇到以下错误:

java.lang.NoSuchMethodError: org.springframework.http.server.reactive.ServerHttpResponse.getRawStatusCode()Ljava/lang/Integer;
    at io.sentry.spring.webflux.SentryWebFilter.finishTransaction(SentryWebFilter.java:149) ~[sentry-spring-6.28.0.jar:na]
    at io.sentry.spring.webflux.SentryWebFilter.lambda$filter$0(SentryWebFilter.java:79) ~[sentry-spring-6.28.0.jar:na]
    at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.runFinally(FluxDoFinally.java:156) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:139) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:395) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:292) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:292) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:395) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:292) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:292) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:395) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:189) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:260) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:1871) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:395) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:189) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:260) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:292) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at org.springframework.http.server.reactive.ChannelSendOperator$WriteCompletionBarrier.onComplete(ChannelSendOperator.java:423) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:81) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:191) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.Operators$MonoSubscriber.onComplete(Operators.java:1679) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.core.publisher.MonoIgnoreThen$ThenAcceptInner.onComplete(MonoIgnoreThen.java:314) ~[reactor-core-3.3.2.RELEASE.jar:3.3.2.RELEASE]
    at reactor.netty.channel.MonoSendMany$SendManyInner.run(MonoSendMany.java:320) [reactor-netty-0.9.4.RELEASE.jar:0.9.4.RELEASE]
    at reactor.netty.channel.MonoSendMany$SendManyInner.trySchedule(MonoSendMany.java:383) [reactor-netty-0.9.4.RELEASE.jar:0.9.4.RELEASE]
    at reactor.netty.channel.MonoSendMany$SendManyInner.trySuccess(MonoSendMany.java:527) [reactor-netty-0.9.4.RELEASE.jar:0.9.4.RELEASE]
    at reactor.netty.channel.MonoSendMany$SendManyInner.trySuccess(MonoSendMany.java:94) [reactor-netty-0.9.4.RELEASE.jar:0.9.4.RELEASE]
    at io.netty.util.internal.PromiseNotificationUtil.trySuccess(PromiseNotificationUtil.java:48) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:717) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:272) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:352) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:414) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:930) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:354) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:897) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:748) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:740) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:726) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush(CombinedChannelDuplexHandler.java:531) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:125) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:356) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:748) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:740) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:726) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at reactor.netty.channel.MonoSendMany$SendManyInner$AsyncFlush.run(MonoSendMany.java:633) [reactor-netty-0.9.4.RELEASE.jar:0.9.4.RELEASE]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [netty-transport-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.45.Final.jar:4.1.45.Final]
    at java.lang.Thread.run(Thread.java:750) [na:1.8.0_362-362]

我的配置文件和依赖如下:

application.yml

sentry:
  dsn: 
  traces-sample-rate: 1.0
  debug: true
  sample-rate: 1
  exception-resolver-order: -2147483647
  tracing-origins: localhost,^(http|https)://api\\..*$
  environment: production

pom.xml

<groupId>com.sample</groupId>
<artifactId>sam-doma-con</artifactId>
<version>1.0.0</version>
<name>sample project</name>
<description>Spring Boot </description>

<properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <log4j2.version>2.16.0</log4j2.version>
    <springfox-version>3.0.0</springfox-version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.sentry</groupId>
        <artifactId>sentry-spring-boot-starter</artifactId>
        <version>6.28.0</version>
    </dependency>
</dependencies>

我已经尝试过验证版本兼容性、排查依赖冲突、分析堆栈信息,但仍未解决问题。想知道这个ServerHttpResponse.getRawStatusCode()相关的错误该怎么排查和解决?


解决方案

这个错误的核心原因是Spring Web版本过低:

从堆栈信息可以看到你当前使用的是spring-web-5.2.3.RELEASE,而ServerHttpResponse.getRawStatusCode()方法是在Spring Framework 5.3.0及以上版本才新增的。你使用的Sentry 6.28.0版本依赖了这个方法,所以出现了方法找不到的错误。

解决步骤:

  1. 升级Spring Boot版本
    Spring Boot 2.4.x及以上版本对应Spring Framework 5.3.x,直接升级Spring Boot版本即可解决这个依赖问题。修改pom.xml中的Spring Boot父依赖(如果没显式声明,需要添加):

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.17</version> <!-- 选择兼容Java 8的最新稳定版,2.7.x是支持Java 8的最后一个分支 -->
        <relativePath/>
    </parent>
    

    注意:Java 8最高支持Spring Boot 2.7.x版本,如果你想升级到更高版本(如3.x),需要将Java版本升级到17+。

  2. 验证依赖版本
    执行mvn dependency:tree命令,确认升级后spring-web的版本已经是5.3.x及以上,同时检查是否有其他依赖强制引入了旧版本的Spring Web,如果有需要排除:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 重新构建项目
    执行mvn clean install清理并重新构建项目,启动应用验证错误是否消失。

额外说明

如果你暂时无法升级Spring Boot版本,可以尝试降级Sentry到兼容Spring 5.2.x的版本。Sentry 6.x版本开始要求Spring Framework 5.3+,所以你需要降级到Sentry 5.x版本,比如:

<dependency>
    <groupId>io.sentry</groupId>
    <artifactId>sentry-spring-boot-starter</artifactId>
    <version>5.30.0</version>
</dependency>

但不推荐长期使用旧版本,建议优先升级Spring Boot版本以获得更好的兼容性和安全性。

内容的提问来源于stack exchange,提问作者shiva chowdary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:34:50