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

如何为R2dbcRepository统一注册错误处理器,消除重复异常处理代码?

如何给R2dbcRepository统一添加全局错误处理?

背景

我有一个应用级的通用异常处理器,用于转换R2dbcRepository抛出的异常,核心逻辑示例如下:

@Component
public class ErrorHandler {
    public Throwable mapError(Throwable ex) {
        if (ex instanceof DataIntegrityViolationException || ex instanceof R2dbcDataIntegrityViolationException) {
            return new MyException(myParameters);
        }
        return new MyException(SERVER_ERROR, "Error accessing database", ex);
    }
}

我还有一个包含大量自定义查询的R2dbcRepository,示例如下:

import org.springframework.data.r2dbc.repository.Query;
import org.springframework.data.r2dbc.repository.R2dbcRepository;

public interface MyEntityRepository extends R2dbcRepository<MyEntity, UUID> {
    @Query("SELECT * FROM my_entity WHERE <complex conditions>")
    Flux<MyEntity> findBySomeCriteria(MyConditions myConditions);
    ...
    // 其他大量方法
}

我希望每次调用仓库的任意方法后自动调用mapError()方法,目前的实现方式如下:

@Service
public class MyService {
    @Autowired MyEntityRepository repository;
    @Autowired ErrorHandler errorHandler;

    public Mono<MyData> getMyData(MyCriteria criteria) {
        return Mono.just(criteria)
            ... // 处理输入数据
            .flatMap(repository::findBySomeCriteria)
            .onErrorMap(errorHandler::mapError) // 这是重复的样板代码
            ... // 额外业务逻辑
            ;
    }
}

问题说明

我希望移除上述重复的样板代码

.onErrorMap(errorHandler::mapError)

并将错误处理逻辑内置到仓库中。

问题

在R2dbcRepository中是否有优雅的解决方案,可以统一注册我的错误处理器,让每个仓库方法的调用都自动被该处理器装饰?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:02:09