我有一个需要使用的产品 REST API,它返回如下内容:
HTTP 200 OK
{ "return_code": "failure_x" }
我无法改变这一点,但我需要保持我的项目理智。
我可以使用Quarkus REST 客户端响应拦截器吗?
在我看来,拦截器是为我的控制器而不是为我的客户准备的。
我想拦截响应并将其修改为正确的 HTTP 代码,然后对其进行处理。
我有一个需要使用的产品 REST API,它返回如下内容:
HTTP 200 OK
{ "return_code": "failure_x" }
我无法改变这一点,但我需要保持我的项目理智。
我可以使用Quarkus REST 客户端响应拦截器吗?
在我看来,拦截器是为我的控制器而不是为我的客户准备的。
我想拦截响应并将其修改为正确的 HTTP 代码,然后对其进行处理。
正如 karelss 在评论中指出的那样,您可以创建一个ClientResponseFilter
来做您想做的事。
这样的过滤器可以通过以下方式注册:
@RegisterProvider(MyFilter.class)
在您的 JAX-RS 界面上application.properties
:com.example.MyInterface/mp-rest/providers=com.example.MyFilter
另一种选择是创建自定义ResponseExceptionMapper
. 您以与过滤器相同的方式注册它。这是示例异常映射器的样子:
package io.quarkus.rest.client.reactive.runtime;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper;
public class DefaultMicroprofileRestClientExceptionMapper implements ResponseExceptionMapper {
public Throwable toThrowable(Response response) {
try {
response.bufferEntity();
} catch (Exception var3) {
}
return new WebApplicationException("Unknown error, status code " + response.getStatus(), response);
}
public boolean handles(int status, MultivaluedMap headers) {
return status >= 400;
}
public int getPriority() {
return 5000;
}
}
有关异常映射器的更多信息,请查看 MicroProfile Rest Client 规范:https ://download.eclipse.org/microprofile/microprofile-rest-client-2.0/microprofile-rest-client-spec-2.0.html#_responseexceptionmapper