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

Java 11 Spring Boot捕获Mono 404错误返回204的实现

处理Spring Boot调用外部服务404转204的实现方案

我有一个Java 11 Spring Boot应用,调用外部Web服务时,无结果会返回404状态码,希望此时自身接口返回204状态码,因此需要捕获外部服务的404错误并转换为204响应。

原有实现代码

public UserDto[] getAllUser(String username) {
    return localApiClient.get().uri(baseUrl + username)
            .retrieve()
            .bodyToMono(UserDto[].class)
            .block(REQUEST_TIMEOUT);
}

修正后的实现代码(修复语法问题并满足需求)

public UserDto[] getAllUser(String username) {
    return localApiClient.get().uri(baseUrl + username)
            .exchangeToMono(response -> {
                if (response.statusCode().equals(HttpStatus.OK)) {
                    return response.bodyToMono(UserDto[].class);
                }
                if (response.statusCode().equals(HttpStatus.NOT_FOUND)) {
                    // 外部返回404时,返回空数组对应204无内容逻辑
                    return Mono.just(new UserDto[0]);
                } else {
                    // 其他异常状态码抛出原始异常,保留错误溯源能力
                    return response.createException().flatMap(Mono::error);
                }
            })
            .block(REQUEST_TIMEOUT);
}

关键实现说明

  • 替换retrieve为exchangeToMono:retrieve会自动将4xx/5xx状态码转为异常,exchangeToMono允许手动处理每一种响应状态码
  • 404转换逻辑:外部返回404时返回空数组,上层接口可基于此返回204状态码(比如Controller方法配合@ResponseStatus(HttpStatus.NO_CONTENT)注解)
  • 异常兜底:非200/404的状态码仍抛出原始异常,避免错误被隐藏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:20:38