< Java REST API kliens

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:

https://github.com/oktat/saclient

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:

https://jsonplaceholder.typicode.com/users/

Szeretnénk lekérdezni a felhasználók adatait és kiíratni a nevüket.

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

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:

https://github.com/google/gson (2022)

Példa

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

Függelék

json könyvtárak

https://github.com/fangyidong/json-simple

http://code.google.com/p/json-simple/

http://www.java2s.com/Code/Jar/j/Downloadjsonsimple11jar.htm

https://mvnrepository.com/artifact/org.json/json

https://github.com/stleary/JSON-java

https://dzone.com/articles/how-to-parse-json-data-from-a-rest-api-using-simpl (2022)