Quarkus ExceptionMapper不处理WebApplicationException

时间:2019-09-12 15:55:13

标签: jax-rs quarkus microprofile

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

对于下面的控制器和异常映射器,对于将因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");
    }
  }
}

还有ExceptionMapper

@Provider
public class HandleMySillyError implements ExceptionMapper<Throwable> {

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

1 个答案:

答案 0 :(得分:1)

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

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

注意:我使用的是quarkus 1.8.3