Tartalomjegyzék

< Java REST API kliens

Java REST API kliens

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.

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:

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

Függelék

json könyvtárak