我正在通过Jersey-Client使用REST API。该API是分页的。

Client client = ClientBuilder.newClient()
        .register(HttpAuthenticationFeature.basic(USER_NAME, PASSWORD));

WebTarget target = client.target(HOST).path(API_BASE).path("content");
PageResult pageResult = target.request(JSON).get()readEntity(PageResult.class);


响应看起来像这样:

{
    "results":[...
    ],
    "start": 0,
    "limit": 25,
    "size": 25,
    "_links": {
        "self": "http://localhost:8090/rest/api/content",
        "next": "/rest/api/content?limit=25&start=25",
        "base": "http://localhost:8090",
        "context": ""
    }
}


pageResult对象正确填充了响应。
现在,我想创建一个新的WebTarget或重用当前的WebTarget。更改的是查询参数。

创建新的WebTarget的最简单方法是什么?

target = client.target(pageResult._links.base).path(pageResult._links.next);


这样,查询参数将无法正确解释。我也不想自己解析网址。有什么API?我可以手动添加查询参数,但我认为应该有一个类似WebTarget.fromString(pageResult._links.base + pageResult._links.next)的方法

最佳答案

换线

target = client.target(pageResult._links.base).path(pageResult._links.next);




target = client.target(pageResult._links.base + pageResult._links.next)


从杜库

/**
 * Build a new web resource target.
 *
 * @param uri web resource URI. May contain template parameters. Must not be {@code null}.
 * @return web resource target bound to the provided URI.
 * @throws IllegalArgumentException in case the supplied string is not a valid URI template.
 * @throws NullPointerException     in case the supplied argument is {@code null}.
 */
public WebTarget target(String uri);

10-07 16:03