微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Quarkus 中,有没有办法在 REST 客户端调用上应用响应拦截器?

如何解决在 Quarkus 中,有没有办法在 REST 客户端调用上应用响应拦截器?

我有一个我需要使用的产品 REST API,它返回如下内容
HTTP 200 正常
{ "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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。