Commit 7632e2c1 by Patryk Czarnik

Przykłady klienta REST

parent 7ba879ad
package sklep.klient;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class Klient1_URL {
// Najprostszy sposób w Javie, aby pobrać jakieś dane z sieci, to użyć klasy URL
public static void main(String[] args) {
String adres = Ustawienia.URL_SERWERA + "products/1";
try {
System.out.println("Otwieram adres...");
URL url = new URL(adres);
try (InputStream input = url.openStream()) {
System.out.println("Czytam dane...");
Files.copy(input, Paths.get("produkt1.txt"), StandardCopyOption.REPLACE_EXISTING);
System.out.println("Gotowe");
};
} catch (IOException e) {
e.printStackTrace();
}
}
}
package sklep.klient;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
// Ten i kolejne przykłady pokazują jak aplikacja kliencka napisana w Javie może wysyłać
// zapytania do usługi REST-owej (głównie GET, jest też gdzieś POST)
// korzystając z technologii JAX-RS "po stronie klienta".
// Aby z tego skorzystać, do projektu trzeba dodać bibliotekę z implementacją JAX-RS.
// Tutaj jest to resteasy-client.
public class Klient2_InputStream {
public static void main(String[] args) {
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
System.out.println("Przygotowuję zapytanie...");
WebTarget target = client.target(Ustawienia.URL_SERWERA + "products");
Invocation.Builder requestBuilder = target.request();
Invocation invocation = requestBuilder.buildGet();
System.out.println("Wysyłam zapytanie...");
Response response = invocation.invoke();
// Wynikiem jest obiekt klasy Response - tej samej, co na serwerze (używaliśmy np. do generowania kodów 404).
// W obiekcie można sprawdzić informacji o odpowiedzi: media type, status code.
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
// Aby odczytać zawartość zwróconą przez serwer, uzywamy metody readEntity.
// (przy domyślnych ustawieniach) tę metodę można wywołać tylko raz.
// W tej wersji dane odbieramy w postaci "surowej" jako ciąg bajtów za pomocą InputStream.
// Jest to najbardziej wydajne, ale jednocześnie mało wygodne, podejście.
String nazwaPliku = "wynik2." + Ustawienia.rozszerzenieDlaTypu(response.getMediaType());
try(InputStream strumienDanych = response.readEntity(InputStream.class)) {
long ileBajtow = Files.copy(strumienDanych, Paths.get(nazwaPliku), StandardCopyOption.REPLACE_EXISTING);
System.out.printf("Zapisano %d bajtów do pliku %s\n", ileBajtow, nazwaPliku);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Gotowe");
}
}
package sklep.klient;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
public class Klient3_InputStream {
public static void main(String[] args) {
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
WebTarget root = client.target(Ustawienia.URL_SERWERA);
Response response = root
.path("products")
.request()
.buildGet()
.invoke();
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
String nazwaPliku = "wynik3." + Ustawienia.rozszerzenieDlaTypu(response.getMediaType());
try(InputStream strumienDanych = response.readEntity(InputStream.class)) {
long ileBajtow = Files.copy(strumienDanych, Paths.get(nazwaPliku), StandardCopyOption.REPLACE_EXISTING);
System.out.printf("Zapisano %d bajtów do pliku %s\n", ileBajtow, nazwaPliku);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Gotowe");
}
}
package sklep.klient;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class Klient4_InputStream_Accept {
public static void main(String[] args) {
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
WebTarget root = client.target(Ustawienia.URL_SERWERA);
Response response = root
.path("products")
.request()
.accept(MediaType.APPLICATION_XML) // albo "application/xml", można też bezp. w request(...)
.buildGet()
.invoke();
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
String nazwaPliku = "wynik4.xml";
try(InputStream strumienDanych = response.readEntity(InputStream.class)) {
long ileBajtow = Files.copy(strumienDanych, Paths.get(nazwaPliku), StandardCopyOption.REPLACE_EXISTING);
System.out.printf("Zapisano %d bajtów do pliku %s\n", ileBajtow, nazwaPliku);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Gotowe");
}
}
package sklep.klient;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class Klient5_InputStream_AcceptPDF {
private static final MediaType PDF_TYPE = new MediaType("application", "pdf");
public static void main(String[] args) {
int productId = 1;
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
WebTarget root = client.target(Ustawienia.URL_SERWERA);
Response response = root
.path("products")
.path("{id}")
.resolveTemplate("id", productId)
.request()
.accept(PDF_TYPE)
.buildGet()
.invoke();
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
String nazwaPliku = "wynik5.pdf";
String contentDisposition = response.getHeaderString("Content-Disposition");
if(contentDisposition != null && contentDisposition.contains(";filename=")) {
nazwaPliku = contentDisposition.split(";filename=")[1];
}
try(InputStream strumienDanych = response.readEntity(InputStream.class)) {
long ileBajtow = Files.copy(strumienDanych, Paths.get(nazwaPliku), StandardCopyOption.REPLACE_EXISTING);
System.out.printf("Zapisano %d bajtów do pliku %s\n", ileBajtow, nazwaPliku);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Gotowe");
}
}
package sklep.klient;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class Klient6_JsonTekstowo {
public static void main(String[] args) {
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
WebTarget root = client.target(Ustawienia.URL_SERWERA);
Response response = root
.path("products")
.request()
.accept(MediaType.APPLICATION_JSON) // albo "application/json", można też bezp. w request(...)
.buildGet()
.invoke();
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
String trescOdpowiedzi = response.readEntity(String.class);
System.out.println("Treść odpowiedzi:");
System.out.println(trescOdpowiedzi);
System.out.println("Gotowe");
}
}
package sklep.klient;
import java.io.File;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class Klient7_RozneKlasy {
public static void main(String[] args) {
System.out.println("Startujemy...");
Client client = ClientBuilder.newClient();
WebTarget root = client.target(Ustawienia.URL_SERWERA);
Response response = root
.path("products")
.request()
.accept(MediaType.APPLICATION_JSON) // albo "application/json", można też bezp. w request(...)
.buildGet()
.invoke();
System.out.println("Otrzymałem response: " + response);
System.out.println("Status: " + response.getStatus());
System.out.println("Content-Type: " + response.getMediaType());
if(response.getStatus() != 200) {
System.out.println("Chyba coś nie tak, więc przerywam.");
return;
}
// Do readEntity przekazuje się klasę, która wskazuje jakiego typu obiekt ma być zwrócony w Javie.
// Te same dane odebrane z serwera mogą być po stronie klienta przedstawione jako
// InputStream, Reader, String, tablica bajtów, plik (tworzny jest plik tymczsowy na dysku)
// a także, co zobaczymy od następnej wersji, obiekt "naszej klasy", np. Product.
// Object obj = response.readEntity(String.class);
// Object obj = response.readEntity(byte[].class);
Object obj = response.readEntity(File.class);
System.out.println(obj);
System.out.println("Gotowe");
}
}
package sklep.klient;
import javax.ws.rs.core.MediaType;
public class Ustawienia {
public static final String URL_SERWERA = "http://localhost:8080/PC34-RestSerwer-1.0/";
public static String rozszerzenieDlaTypu(MediaType mediaType) {
switch(mediaType.getSubtype()) {
case "xml": return "xml";
case "html": return "html";
case "plain": return "txt";
case "json": return "json";
case "png": return "png";
case "jpeg": return "jpg";
default: return "";
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment