JAX RS Client API拦截器

Ale*_*ndr 4 java aop jax-rs interceptor

有没有办法通过拦截器向请求添加标头,但是当使用JAX RS Client API时,不能通过显式设置标头:

Client client = ClientBuilder.newClient();
Response response = client.target("someUrl").path("somePath").request().get();
Run Code Online (Sandbox Code Playgroud)

在AOP方式

cas*_*lin 5

创建一个ClientRequestFilter:

@Provider
public class MyClientRequestFilter implements ClientRequestFilter {

    @Override
    public void filter(ClientRequestContext requestContext) throws IOException {
        requestContext.getHeaders().add("Authorization", "value");
    }
}
Run Code Online (Sandbox Code Playgroud)

并在您的注册中注册Client:

Client client = ClientBuilder.newClient().register(MyClientRequestFilter.class);
Run Code Online (Sandbox Code Playgroud)

  • @Alexandr,您想创建多少个客户?请注意,`Client`实例是重量级对象,[文档建议在应用程序中只创建少量的`Client`实例](http://docs.oracle.com/javaee/7/api/javax /ws/rs/client/Client.html).在处理它之前,不要忘记[关闭你的`Client`实例](http://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html#close--). (2认同)
  • 如果您的项目中启用了[CDI](https://docs.oracle.com/javaee/7/tutorial/cdi-basic.htm),我的建议是使用[生产者方法或生产者]生成`Client`实例字段(https://docs.oracle.com/javaee/7/tutorial/cdi-adv003.htm).要关闭客户端,请使用[disposer method](https://docs.oracle.com/javaee/7/tutorial/cdi-adv003.htm). (2认同)