【问题标题】:Add query param at runtime when using CXF proxy client使用 CXF 代理客户端时在运行时添加查询参数
【发布时间】:2018-10-12 07:40:18
【问题描述】:

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

提前谢谢你。

【问题讨论】:

    标签: jax-rs cxfrs


    【解决方案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 是一种提供者。

    【讨论】:

    • 有一个错误,如果我将 ClientRequestFilter 作为 lambda 提供它不起作用,但使用匿名类它确实有效。谢谢你的回答,对我帮助很大。
    猜你喜欢
    • 2015-03-07
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2017-04-08
    • 2020-12-14
    相关资源
    最近更新 更多