我试图了解这是功能还是错误...:-)
对于下面的控制器和异常映射器,对于将因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();
}
}
答案 0 :(得分:1)
我发现以quarkus:dev模式运行时未调用异常映射器。看来这是由quarkus中的异常映射器引起的,该映射器仅在DEV模式下使用(请参见https://github.com/quarkusio/quarkus/issues/7883)。
我像正常的Java程序一样在本地启动了代码,导致异常处理程序按预期方式工作。同样在Openshift上运行代码时,也会使用我的自定义异常映射器。
注意:我使用的是quarkus 1.8.3