/ / Java REST client - prepísať skrútený kód do Java kódu - java, json, curl, xmlhttprequest, java-ws

Java REST klient - prepísať kód zakrivenia do Java kódu - java, json, curl, xmlhttprequest, java-ws

Píšem jednoduchého REST klienta v Javepošle požiadavky na server a načíta niektoré údaje. Server používa token na autorizáciu, ktorý musí byť zahrnutý v hlavičke (podľa dokumentácie).

Problém je, že neviem, ako ho správne prepísať. mám curl príkaz, ktorý funguje dobre:

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

Táto požiadavka vráti správnu odpoveď (v tomto prípade niektoré výsledky pre daný dotaz).

Pokúsil som sa to prepísať v jazyku Java, ale dostávam „404 - zdroj nebol nájdený, hoci“ dotaz je rovnaký.

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

Môžete mi naznačiť, keď mi niečo uniklo? Pravdepodobne to bude blbá chyba, ale niekoľko hodín som sa snažil, aby to fungovalo, a som bezradný.

odpovede:

2 pre odpoveď č. 1

Problém je v tom, že ste zahrnuli dotazparametre ako súčasť cesty a pravdepodobne sa pred odovzdaním na server kódujú pomocou adresy URL. Namiesto toho explicitne nastavte parametre dopytu (čo tiež uľahčuje použitie premenných):

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

Všimnite si, že je často užitočné vytvoriť serverladenie na miesto, kde tlačí aktuálne požadované adresy URL a ako ich interpretuje. To by ukázalo, že adresa URL, na ktorej server videl, s ňou mala niečo zlé.