Quarkus ExceptionMapper 不处理 WebApplicationException

bmo*_*ney 7 jax-rs microprofile quarkus

我试图了解这是一个功能还是一个错误...:-)

对于下面的控制器和异常映射器,对于将因 401 响应而失败的其余客户端,我希望在这两种情况下都会调用异常处理程序。但是,不会针对 WebApplicationException 调用它。为什么会这样以及您打算如何为这些情况注册异常处理程序。这是使用 Quarkus 版本 0.21.2

@Path("/failable")
public class FailableResource {

  @Inject
  @RestClient
  private SomeHttpClient httpClient;

  @GET
  @Path("fails")
  @Produces(MediaType.TEXT_PLAIN)
  public String fails() {
    try {
      return httpClient.someQuery();
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  @GET
  @Path("works")
  @Produces(MediaType.TEXT_PLAIN)
  public String works() {
    try {
      return httpClient.someQuery();
    } catch (Exception e) {
      e.printStackTrace();
      throw new IllegalStateException("Not a WebApplicationException");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和异常映射器

@Provider
public class HandleMySillyError implements ExceptionMapper<Throwable> {

  @Override
  public Response toResponse(Throwable e) {
    e.printStackTrace();
    return Response.ok("Some handled response").build();
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 4

我发现在 quarkus:dev 模式下运行时,不会调用异常映射器。这似乎是由 quarkus 的异常映射器引起的,该映射器仅在 DEV 模式下使用(请参阅https://github.com/quarkusio/quarkus/issues/7883)。

我像正常的 java 程序一样在本地启动了我的代码,导致我的异常处理程序按预期工作。此外,在 Openshift 上运行代码时,也会使用我的自定义异常映射器。

注意:我使用的quarkus版本1.8.3