2017-06-11 8 views
2

私はJersey2を使って簡単なヘッダーを取得しようとしています。私はJersey 2.x: How to add Headers on RESTful Clientを読んで下のコードを作成するのを手伝いましたが、私は大したことはありません。提案通りにclientRequestFilterを作成しましたが、クライアントに正しく登録する方法がわかりません。これは私の中心的な問題かもしれません。ジャージー2 - シンプルなクライアントヘッダーを取得する例

私が間違って何をしているのかを確認するために、ClientRequestFilterを登録しているか、それ以上のものがないかどうかを確認したいと考えています。以下は私が消費しようとしているWebサービスのドキュメントとそれを消費しようとするjersey2クライアントコードです。

Webサービスドキュメント:以下

ポンポンとコードは次のとおりです。

例GET

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 

私のロジックが(にID#1と顧客を「読み」)。

ポンポンの依存関係:

<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を含むウェブページとして...私はおそらく私が何かを正しく作っていなかったと思うか、ヘッダーを設定していないと思います適切にまたは何か他の。誰かを願って、私が間違っていることについての健全性チェックを私に与えることができます。

答えて

1

ClientConfigclientRequestFilterを登録していません。私はclientRequestFilter用に別のクラスを作成し、そのクラスを登録することを好む、けれども

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

- - 以下のような何かを行う。これにより

config.register(HeadersClientRequestFilter.class); 

を、ジャージーは自動的ClientRequestFilterオブジェクトの作成と破棄を処理します。

関連する問題