使用CXF代理客户端时在运行时添加查询参数

时间:2018-10-11 17:51:09

标签: jax-rs cxfrs

因此,我正在使用CXF-RS代理功能来创建可重复使用的REST客户端,该客户端将在多个应用程序中使用。所以我有一个类似这样的界面:

@Path("/hello")
public interface HelloService {

    @GET
    @Path("sayHello")
    String sayHello(@QueryParam("name") String name);
}

我正在使用

创建客户端
JAXRSClientFactory.create(address, HelloService.class, Collections.singletonList(JacksonJsonProvider.class), true)

但是现在我需要根据应用程序的配置向请求发送附加的查询参数。我不想更改接口HelloService,而是使用某种过滤器来处理此问题。我看到了ClientRequestFilter,但是我不知道它是否是正确的工具以及如何将其添加到代理中(我看到的所有教程都使用ClientBuilder.newClient()而不是代理)。

谢谢。

1 个答案:

答案 0 :(得分:1)

当然可以为此使用ClientRequestFilter。假设您要添加查询参数。你可以做类似的事情

public class MyClientFilter implements ClientRequestFilter {

    @Override
    public void filter(ClientRequestContext request) throws IOException {
        request.setUri(UriBuilder.fromUri(request.getUri())
                .queryParam("foo", "bar")
                .build());
    }
}

要注册它,只需将其添加到传递的列表中,作为JAXRSClientFactory.create的第三个参数。查看JAXRSClientFactory的文档。您可以看到接受了提供程序列表的重载create方法。 ClientRequestFilter是一种提供程序。