【问题标题】:Need to add custom HTTP Request Header to a JAX-RS client, using an interceptor需要使用拦截器将自定义 HTTP 请求标头添加到 JAX-RS 客户端
【发布时间】:2012-09-20 23:59:07
【问题描述】:

我正在使用 JAX-RS 1.0。服务器在处理请求之前验证是否存在自定义 HTTP 标头。

我想为 JAX-RS 客户端创建某种类似于 AOP 的行为,它会自动将 HTTP 标头添加到每个请求。

JAX-RS 1.0 是否支持出站客户端拦截器?我在文档中找不到任何提及。另一种方法是我编写一个特定于 CXF 的出站拦截器...谢谢!

【问题讨论】:

标签: java cxf jax-rs


【解决方案1】:

你可以写一个@PreMatching 拦截器

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import java.io.IOException;

@PreMatching
public class ContentTypeFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext)
            throws IOException {

        requestContext.getHeaders().putSingle("Content-Type", "application/json");
    }
}

【讨论】:

    【解决方案2】:

    在 JAX-RS 1.0 中没有很好的方法来做到这一点。我使用了 CXF 拦截器。

    【讨论】:

    • 这完全是错误的。如上所述,可以做到。
    • @ThePaul 当时,我仅限于 JAX-RS 1.0,所以你的说法不正确
    【解决方案3】:

    嗯,JAX-RS 是一个 API,所以应该能够为它提供您自己的实现。如何实现javax.ws.rs.client.ClientFactory,并从getClient() 返回预配置的javax.ws.rs.client.Client。只要您的类与您使用的 JAX-RS 实现不冲突,就应该可以正常工作。

    【讨论】:

    • :( 不是一个好的解决方案,这可能会引入很多技术债务。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2019-09-19
    • 2021-09-02
    • 2018-07-11
    • 2015-11-18
    • 2011-08-12
    相关资源
    最近更新 更多