Jersey 2 - 简单的客户端获取 Headers 示例
Jersey 2 - Simple Client Get with Headers Example
我正在尝试使用 Jersey2
对 headers 进行简单的获取。我通读了 以帮助在下面创建我的代码,但我运气不佳。我按照建议创建了 clientRequestFilter
,但不知道如何正确地向客户端注册它,我认为这可能是我的核心问题。
我希望得到健全性检查,看看我做错了什么需要它注册 ClientRequestFilter
或者我是否遗漏了更多。下面是我尝试使用的网络服务的文档以及我尝试使用它的 jersey2 客户端代码。
Web 服务文档:
EXAMPLE GET(“读取”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... 这让我觉得也许我没有制作一些正确的东西或者我没有正确设置 headers 或其他东西。希望有人能给我一个健全的检查,看看我做错了什么。
您还没有用 ClientConfig
注册 clientRequestFilter
。做类似下面的事情 -
ClientConfig config = new ClientConfig();
config.register(clientRequestFilter);
Client client = ClientBuilder.newBuilder().newClient(config);
不过,我更喜欢为 clientRequestFilter
创建一个单独的 class 并注册 class -
config.register(HeadersClientRequestFilter.class);
由此,Jersey 将自动处理 ClientRequestFilter
对象的创建和销毁。
我正在尝试使用 Jersey2
对 headers 进行简单的获取。我通读了 clientRequestFilter
,但不知道如何正确地向客户端注册它,我认为这可能是我的核心问题。
我希望得到健全性检查,看看我做错了什么需要它注册 ClientRequestFilter
或者我是否遗漏了更多。下面是我尝试使用的网络服务的文档以及我尝试使用它的 jersey2 客户端代码。
Web 服务文档:
EXAMPLE GET(“读取”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... 这让我觉得也许我没有制作一些正确的东西或者我没有正确设置 headers 或其他东西。希望有人能给我一个健全的检查,看看我做错了什么。
您还没有用 ClientConfig
注册 clientRequestFilter
。做类似下面的事情 -
ClientConfig config = new ClientConfig();
config.register(clientRequestFilter);
Client client = ClientBuilder.newBuilder().newClient(config);
不过,我更喜欢为 clientRequestFilter
创建一个单独的 class 并注册 class -
config.register(HeadersClientRequestFilter.class);
由此,Jersey 将自动处理 ClientRequestFilter
对象的创建和销毁。