球衣2-简单客户端获取标题示例

詹姆斯·奥拉维克

我正在尝试使用进行标头的简单获取Jersey2我通读了Jersey 2.x:如何在RESTful客户端上添加标题以帮助在下面创建我的代码,但是我运气不高。clientRequestFilter按照建议创建了,但不知道如何在客户端正确注册它,我认为这可能是我的核心问题。

我希望进行健全性检查,以查看我做错了什么,需要它进行注册,ClientRequestFilter或者如果我错过了更多的东西。以下是我要使用的Web服务的文档以及我要使用的jersey2客户端代码的文档。

Web服务文档:

示例获取(以“读取” ID为1的客户)

GET https://myportal.0.site.com/ApiService.svc/Customer/1 HTTP/1.1
Content-Type: application/json 
Token: <enter your unique token here> 
Host: myportal.0.site.com 
Content-Length: 0
Connection: Keep-Alive 
ServerName: myportal

我的逻辑:

下面是pom和代码。

pom依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.22.1</version>
    </dependency>

编码:

    final String portal = "myportal";
    final String host = portal + ".0.site.com";
    final String baseURL = "https://" + host + "/ApiService.svc";
    final String token = "00000-0000-0000-0000-0000-000000";
    final String getCustomer1URL = baseURL + "/Customer/1";
    final String contentType = "application/json";
    final String contentLength = "0";
    final String connection = "Keep-Alive";

    try {

        // Headers for client.
        ClientRequestFilter clientRequestFilter = new ClientRequestFilter() {
            public void filter(ClientRequestContext clientRequestContext) throws IOException {
                clientRequestContext.getHeaders().add("Token", token);
                clientRequestContext.getHeaders().add("ServerName", serverName);
                clientRequestContext.getHeaders().add("Content-Type", contentType);
                clientRequestContext.getHeaders().add("Content-Length", contentLength);
                clientRequestContext.getHeaders().add("Connection", connection);

            }
        };

        ClientConfig config = new ClientConfig();
        Client client = ClientBuilder.newBuilder().newClient(config);

        //GET Request
        final Response response = client.target(getCustomer1URL).request().get();

        if (response.getStatus() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
        }
        String output = response.readEntity(String.class);
        System.out.println("Output from Server... \n");
        System.out.println(output);
        client.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

我得到的是:

有了上面的内容,我得到了<!DOCTYPE html>html作为包含javascript的网页的响应...这让我觉得也许我没有正确地制作某些东西,或者我没有正确设置标题或其他东西。希望有人可以对我做错了事进行检查。

维卡斯(Vikas Sachdeva)

您还没有登录clientRequestFilter你的ClientConfig做下面的事情-

 ClientConfig config = new ClientConfig();
 config.register(clientRequestFilter);
 Client client = ClientBuilder.newBuilder().newClient(config);

虽然,我更愿意为它创建一个单独的类clientRequestFilter并注册该类-

 config.register(HeadersClientRequestFilter.class);

这样,Jersey将自动处理ClientRequestFilter对象的创建和破坏

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章