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

Add query param at runtime when using CXF proxy client

所以我正在使用 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() 而不是代理)。

提前致谢。

当然,您可以为此使用 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 是一种提供者。