私はJavaで簡単なRESTクライアントを書いていますサーバーにリクエストを送信し、データを取得します。サーバーは、承認にトークンを使用しますが、これはヘッダーに含まれる必要があります(ドキュメントに従って)。
問題は、正しく書き直す方法がわからないことです。私は持っています curl
うまく機能するコマンド:
curl --include --header "authorization:a7b857f6.....rest of my token" --header "Content-Type: application/json" https://serverUrl/v1/search?q=someQuery
この要求は正しい答えを返します(この場合、特定のクエリの結果)。
これをJavaで書き直そうとしましたが、クエリが同じである「404-リソースが見つかりません」と表示されます。
public void getResultsByQuery() {
Client client = ClientBuilder.newClient();
Response response = client
.target("https://serverUrl")
.path("/v1/search?q=someQuery")
.request("application/json")
.header("Content-Type", "application/json")
.header("authorization", "a7b857f6-........rest of my token")
.get();
System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
}
何か見逃した場合のヒントを教えてください。それはおそらくいくつかの愚かな間違いでしょうが、私はそれを機能させるために数時間を費やし、私は無知です。
回答:
回答№1は2問題は、クエリを含めていることですパラメータをパスの一部として使用し、「サーバーに渡す前にURLエンコードされていると考えられます。代わりに、クエリパラメータを明示的に設定します(変数の使用が容易になります):
Response response = client
.target("https://serverUrl")
.path("/v1/search")
.queryParam("q", "someQuery")
.request("application/json")
.header("Content-Type", "application/json")
.header("authorization", "a7b857f6-........rest of my token")
.get();
サーバーを起動すると便利なことが多いことに注意してください要求されている実際のURLを出力する場所とその解釈方法をデバッグします。これは、サーバーが表示しているURLに何らかの問題があることを示していました。