【问题标题】:Is it possible to have multiple handlers for the same exception leveraging RESTEasy's ExceptionMapper?是否可以利用 RESTEasy 的 ExceptionMapper 为同一个异常提供多个处理程序?
【发布时间】:2021-05-20 17:39:42
【问题描述】:

在处理 RESTEasy 异常时,执行自定义异常处理通常非常简单(在这种情况下,目的是在接收 HTTP 请求时处理编组问题):

@Provider
class MissingKotlinParameterExceptionHandler : ExceptionMapper<MissingKotlinParameterException> {
    override fun toResponse(exception: MissingKotlinParameterException?): Response {
        println("my MissingKotlinParameterException mapper")
        return Response.serverError().build()
    }
}

然而,我遇到的特殊挑战是从不同的端点抛出相同的异常。例如,由于架构规范,/service1/foo/service2/bar 返回完全独立的错误有效负载。是否可以根据某种配置或包结构来分离实现?

【问题讨论】:

  • 您可以使用某种委托模式,其中主 ExceptionMapper 委托给不同的 ExceptionMapper。还可以选择使异常扩展 WebApplicationException ,其中可以提供响应。您可以做很多事情,包括按照 geoand 的建议注入 ResourceInfo

标签: jax-rs resteasy quarkus


【解决方案1】:

您可以使用以下方法将资源信息注入ExceptionMapper 类:

@Context ResourceInfo info; // this is the java version

然后在toResponse 中使用该字段以确定为请求提供服务的资源方法。

【讨论】:

  • 虽然允许switch 语句(或重载方法),但它的扩展性并不好。
  • 如果您对更好的 API 有任何建议,那么我们一定很乐意听取他们的意见!
猜你喜欢
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2012-09-13
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多