在我的 quarkus rest 项目中,我有一个使用 mutiny 的 restclient:
@Path("/")
@RegisterRestClient(configKey = "my-api")
@RegisterClientHeaders
@RegisterProvider(MyExceptionMapper.class)
public interface MyClient {
@POST
@Path("path")
Uni<MyBean> get(String body);
}
我想处理非 2XX httpError 的属性,所以我制作了我的 ExceptionMaper
public class MyExceptionMapper implements ResponseExceptionMapper<MyException> {
@Override
public MyException toThrowable(Response response) {
//TODO
return new MyException();
}
}
客户端上的错误调用表明 MyExceptionMapper 处理响应,但异常引发并且不会成为我的 Uni Client 响应对象上的失败
Uni<MyBean> bean = myClient.get("") // i do not have a failure in case of 4XX http
.onFailure().invoke(fail -> System.out.println("how can i get here?"));
我是否以错误的方式在休息客户端上使用兵变?
谢谢
更新
好的,我忘记添加依赖项 quarkus-rest-client-mutiny,添加这个我注意到 2 件事,
我仍然通过 Myexceptionmapper
我也产生了 Uni.failure,但失败的异常不是我在 MyExceptionmapper 中创建的自定义异常,而是 RestEasyWebApplicationException
失败:org.jboss.resteasy.client.exception.ResteasyWebApplicationException:未知错误,在 org.jboss.resteasy.microprofile 的 org.jboss.resteasy.client.exception.WebApplicationExceptionWrapper.wrap(WebApplicationExceptionWrapper.java:107) 的状态码 400。 client.DefaultResponseExceptionMapper.toThrowable(DefaultResponseExceptionMapper.java:21)
ExceptionMapper 在这种情况下会变得无用吗?