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

Spring WebClient遇非200状态码抛异常,如何强制返回响应?

解决Spring WebClient非200状态码抛异常的问题

核心方案是用exchangeToMono()替代retrieve()——retrieve()默认会对非2xx状态码抛出异常,而exchangeToMono()允许你手动处理任意状态码的响应,直接解析返回自定义响应对象。

修改后的代码实现

fun createSomething(body: String): SomeCustomResponse {
    return signedRequest
        .exchangeToMono { clientResponse ->
            // 无视状态码,统一解析为SomeCustomResponse
            clientResponse.bodyToMono(SomeCustomResponse::class.java)
        }
        .block()
}

为什么之前的onStatus()方法不适用

onStatus()的设计目的是针对特定状态码自定义抛出的异常,它的回调函数必须返回Mono<Throwable>类型,而非响应对象。你之前尝试返回Mono<SomeCustomResponse>,自然会触发类型不匹配的编译错误,这是该方法的功能限制。

可选扩展:按需添加状态码处理逻辑

如果需要对错误状态码做额外操作(比如日志记录),可以在exchangeToMono()中补充逻辑:

fun createSomething(body: String): SomeCustomResponse {
    return signedRequest
        .exchangeToMono { clientResponse ->
            val statusCode = clientResponse.statusCode()
            if (statusCode.isError) {
                // 示例:记录错误状态码日志
                println("请求返回错误状态码: $statusCode")
            }
            clientResponse.bodyToMono(SomeCustomResponse::class.java)
        }
        .block()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:25:23