Tartalomjegyzék
Java REST API kliens
- Szerző: Sallai András
- Copyright © 2022, Sallai András
- Szerkesztve: 2022, 2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
REST API kliens megvalósítására a Java nyelvben HTTP kapcsolatra képes osztályra van szükségünk. Az 1.1 JDK-tól rendelkezésre áll a java.net.HttpURLConnection. A 11-s Java verziótól elérhető a java.net.http.HttpClient. Utóbbi használata rövidebb kódot eredményez.
- java.net.HttpURLConnection - Java 1-től
- java.net.http.HttpClient - Java 11-től
Ebben a leírásban a HttpURLconnection osztályt használjuk.
Előre elkészített REST API klienst találunk a következő helyen:
REST API általában JSON formátumban szolgálja ki az adatokat. Ehhez külső programozói könyvtárakat szoktunk használni. Ilyenek:
- JSON.simple
- Gson
Itt mindkettőre látunk példát.
JSON.simple
Olvasás
A következő példában egy online elérhető helyettesítő REST API-t fogunk használni:
Szeretnénk lekérdezni a felhasználók adatait és kiíratni a nevüket.
- App.java
import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class App { public static void main(String[] args) throws Exception { System.out.println("REST API olvasás"); URL url = new URL("https://jsonplaceholder.typicode.com/users/"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); int responseCode = conn.getResponseCode(); if (responseCode != 200) { throw new RuntimeException("Http válasz: " + responseCode); }else { Object obj; JSONArray ja; try { JSONParser parser=new JSONParser(); obj = parser.parse(new InputStreamReader(conn.getInputStream())); ja = (JSONArray) obj; } catch ( ParseException ex) { throw new IOException("JSON parser error, " + ex.getMessage(),ex); } Iterator itr = ja.iterator(); while(itr.hasNext()) { JSONObject obj2 = (JSONObject) itr.next(); System.out.println( obj2.get("name") ); System.out.println( ((JSONObject) obj2.get("address")).get("city") ); } } } }
Olvasás 2
Nézzük meg egy localhost:8000 található REST API lekérdezése, ami dolgozók adatait szolgáltatja.
Ha a REST API egy hai-server előfordulhat, hogy IPv6-s címmel érhető el: [::1]
- App.java
import java.net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import java.util.Scanner; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; public class App { public static void main(String[] args) throws Exception { System.out.println("JSON olvasás"); URL url = new URL("http://localhost:8000/api/employees"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); int responsecode = conn.getResponseCode(); if(responsecode != 200) { throw new RuntimeException("HttpResponseCode: " + responsecode); }else { Scanner sc = new Scanner(url.openStream(), "UTF-8"); String inline = ""; while(sc.hasNext()) { inline += sc.nextLine(); } JSONParser parse = new JSONParser(); Object obj = parse.parse(inline); JSONArray ja = (JSONArray) obj; Iterator itr = ja.iterator(); while(itr.hasNext()) { JSONObject obj2 = (JSONObject) itr.next(); System.out.println( obj2.get("name") ); } } } }
Gson
A Gson egy Java programozói könyvtár, amely lehetővé teszi Java objektumok JSON szöveggé alakítását és vissza.
A Gson letöltése:
Példa
- Employee.java
public class Employee { String name; String city; double salary; public Employee() {} public Employee(String name, String city, double salary) { this.name = name; this.city = city; this.salary = salary; } }
- App.java
import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class App { public static void main(String[] args) throws Exception { System.out.println("REST API lekérés"); URL url = new URL("http://localhost:3000/employees"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("GET"); http.connect(); String text = null; int responseCode = http.getResponseCode(); if (responseCode != 200) { throw new RuntimeException("Http válasz: " + responseCode); }else { text = new String( http.getInputStream().readAllBytes(), StandardCharsets.UTF_8); } GsonBuilder builder = new GsonBuilder(); builder.setPrettyPrinting(); Gson gson = builder.create(); Employee[] employeeArray = gson.fromJson(text, Employee[].class); ArrayList<Employee> list = new ArrayList<>(Arrays.asList(employeeArray)); for(Employee employee: list) { System.out.println(employee.name); } } }