/ / Java REST-Client - Curl-Code in Java-Code umschreiben - java, json, curl, xmlhttprequest, java-ws

Java-REST-Client - Locken Sie den Curl-Code in Java-Code um - Java, Json, Curl, Xmlhttprequest, Java-Ws

Ich schreibe einen einfachen REST-Client in Java, dersendet Anfragen an einen Server und ruft einige Daten ab. Der Server verwendet einen Token für die Autorisierung, der laut Dokumentation im Header enthalten sein muss.

Das Problem ist, ich bin nicht sicher, wie ich es richtig richtig umschreiben soll. Ich habe ein curl Befehl, der gut funktioniert:

curl --include --header "authorization:a7b857f6.....rest of my token" --header "Content-Type: application/json" https://serverUrl/v1/search?q=someQuery

Diese Anforderung gibt die richtige Antwort zurück (in diesem Fall einige Ergebnisse für eine bestimmte Abfrage).

Ich habe versucht, dies in Java umzuschreiben, aber ich erhalte die Meldung "404 - Ressource nicht gefunden", obwohl die Abfrage dieselbe ist.

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));
}

Kannst du mir einen Hinweis geben, wenn ich etwas verpasst habe? Es wird wahrscheinlich ein dummer Fehler sein, aber ich habe mehrere Stunden damit verbracht, es zum Laufen zu bringen, und ich bin ahnungslos.

Antworten:

2 für die Antwort № 1

Das Problem ist, dass Sie die Abfrage einschließenParameter sind Teil des Pfads und werden vermutlich vor der Übergabe an den Server URL-codiert. Legen Sie stattdessen die Abfrageparameter explizit fest (was auch die Verwendung von Variablen erleichtert):

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();

Beachten Sie, dass es oft hilfreich ist, den Server hochzufahrenDas Debuggen dahin, wo die tatsächlich angeforderten URLs gedruckt werden und wie sie interpretiert werden. Dies hätte gezeigt, dass die URL, die der Server sah, einen Fehler aufwies.