获取在 Spring 中导致异常的操作的输入 value/context 的惯用方法?
Idiomatic way to get a hold of the input value/context of the operation that caused an exception in Spring?
我正在使用 Spring 和来自项目反应器的操作员(Mono、Flux 等),我的问题是关于错误处理。假设我有这段代码:
val fluxOfNames : Flux<String> = ..
fluxOfNames.flatMap { name ->
externalResource.fetchInfo(name)
}.doOnError { throwable ->
// TODO How can I get the "name" that failed?
println("$name failed due to ${throwable.message")
}. ..
我想打印失败的 name
,但它不在传递给 doOnError
afaik 的 lambda 函数的范围内。我可能可以将对 externalResource.fetchInfo(name)
的调用包装在一个包含 name
参数值的自定义异常中,但如果我必须在所有地方都这样做,它很快就会变得丑陋。
当 throwable
不包含此信息时,有没有办法让我在 doOnError
lambda 表达式中获取 name
的值?
问题是您假设由 doOnError
(或与此相关的任何 onError*
运算符)处理的错误来自其正上方的运算符。但实际上,它可能来自链条的更上游。或者它可以在终端信号期间出现,因此根本不与值关联...
幸运的是,您使用的是 flatMap
。只需将 doOnError
放在 中,这样它就只捕获来自 externalResource.fetchInfo
的错误。这样 name
仍在范围内,您可以在错误消息中使用它。
我正在使用 Spring 和来自项目反应器的操作员(Mono、Flux 等),我的问题是关于错误处理。假设我有这段代码:
val fluxOfNames : Flux<String> = ..
fluxOfNames.flatMap { name ->
externalResource.fetchInfo(name)
}.doOnError { throwable ->
// TODO How can I get the "name" that failed?
println("$name failed due to ${throwable.message")
}. ..
我想打印失败的 name
,但它不在传递给 doOnError
afaik 的 lambda 函数的范围内。我可能可以将对 externalResource.fetchInfo(name)
的调用包装在一个包含 name
参数值的自定义异常中,但如果我必须在所有地方都这样做,它很快就会变得丑陋。
当 throwable
不包含此信息时,有没有办法让我在 doOnError
lambda 表达式中获取 name
的值?
问题是您假设由 doOnError
(或与此相关的任何 onError*
运算符)处理的错误来自其正上方的运算符。但实际上,它可能来自链条的更上游。或者它可以在终端信号期间出现,因此根本不与值关联...
幸运的是,您使用的是 flatMap
。只需将 doOnError
放在 中,这样它就只捕获来自 externalResource.fetchInfo
的错误。这样 name
仍在范围内,您可以在错误消息中使用它。