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ď č. 1Problé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é.