Quarkus Microprofile Rest Client ResponseExceptionMapper 不捕获错误
Quarkus Microprofile Rest Client ResponseExceptionMapper doesn't catch errors
我在 Quarkus (1.8.1) 服务中有一个 Rest Client,定义如下:
@RegisterRestClient
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {
@POST
@Path("/{entity}")
Response postEntity(@HeaderParam(value = "Authorization") String auth,
@PathParam("entity") String entity, Object payload) throws MyException;
}
我在同一个包中实现了 ResponseExceptionMapper
,如下所示:
public class MyExceptionMapper implements ResponseExceptionMapper<MyException> {
@Override
public MyException toThrowable(Response r) {
return new DynamicsException(r.getStatus() + " - " + r.readEntity(String.class));
}
}
当我调用该服务时,它当前返回 404 错误,我希望调用 MyExceptionMapper
class 中的代码。但是它没有,而是抛出 javax.ws.rs.WebApplicationException
。堆栈跟踪包括对 DefaultResponseExceptionMapper
的调用。我的mapper好像还没有注册
如何为服务调用的无效响应注册我的处理程序?
您需要使用 @RegisterProvider(MyExceptionMapper.class)
.
将 MyExceptionMapper 注册为其余客户端的提供程序
@RegisterRestClient
@RegisterProvider(MyExceptionMapper.class)
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {
我在 Quarkus (1.8.1) 服务中有一个 Rest Client,定义如下:
@RegisterRestClient
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {
@POST
@Path("/{entity}")
Response postEntity(@HeaderParam(value = "Authorization") String auth,
@PathParam("entity") String entity, Object payload) throws MyException;
}
我在同一个包中实现了 ResponseExceptionMapper
,如下所示:
public class MyExceptionMapper implements ResponseExceptionMapper<MyException> {
@Override
public MyException toThrowable(Response r) {
return new DynamicsException(r.getStatus() + " - " + r.readEntity(String.class));
}
}
当我调用该服务时,它当前返回 404 错误,我希望调用 MyExceptionMapper
class 中的代码。但是它没有,而是抛出 javax.ws.rs.WebApplicationException
。堆栈跟踪包括对 DefaultResponseExceptionMapper
的调用。我的mapper好像还没有注册
如何为服务调用的无效响应注册我的处理程序?
您需要使用 @RegisterProvider(MyExceptionMapper.class)
.
@RegisterRestClient
@RegisterProvider(MyExceptionMapper.class)
@Path("/")
@Produces("application/json")
@Consumes("application/json")
public interface MyClient {