问题描述
我在 postgresql 数据库中有一些限制(唯一的、外键......)。
我使用 spring 数据 r2dbc 存储库:ReactiveCrudRepository
我想根据 DataIntegrityViolationException
的 constraintName
字段中的 ErrorDetails
将存储库抛出的 PostgresqlDataIntegrityViolationException
转换为一些自定义异常。
但是包含 ExceptionFactory
的 PostgresqlDataIntegrityViolationException
类是包私有的。所以我不能将 DataIntegrityViolationException
的原因异常转换为 PostgresqlDataIntegrityViolationException
。
当我捕捉到 constraintName
时,访问 DataIntegrityViolationException
的最干净方法是什么?
(比解析异常消息更好^^)
编辑:
我已经结束了这个解决方案:
val DataIntegrityViolationException.pgErrorDetails: ErrorDetails
get() = when(val cause = this.cause) {
null -> error("cause should not be null")
else -> cause.javaClass
.getDeclaredField("errorDetails")
.apply { isAccessible = true }
.let { it.get(cause) as ErrorDetails }
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)