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
相关产品推荐
相关产品推荐

