使用 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
是一种提供者。
所以我正在使用 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
是一种提供者。