Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:java:java_rest_api_kliens:gson

< Java REST API kliens

Java REST API Gson használat

Bevezetés

Ebben a példában Gson könyvtárat a és a Java HttpURLConnection osztályát használjuk a REST API elérésére.

A Gson beszerzése:

A működésről

Sorosítás

A sorosítás vagy angolul serialization, amikor egy Java objektumot JSON formátumra alakítunk. Lépések:

  • A toJson() metódssal átadjuk az objektumot
  • Formázás, ha szükséges
Gson gson = new Gson();
MyObject obj = new MyObject("Alice", 25);
// Az obj-t JSON formátumra alakítja
String json = gson.toJson(obj);  

Objektumok és JSON konverzió

A deszerializáció vagy angolul deserialization, amikor JSON formátumot egy Java objektumra alakítunk. Lépések:

  • A fromJson() metódssal átadjuk az objektumot
String jsonInput = "{\"name\":\"Bob\",\"age\":30}";
// JSON-ból objektumot hoz létre
MyObject newObj = gson.fromJson(jsonInput, MyObject.class);

Gson funkciók

  • Listák és szótárak kezelése generikus típusokkal.
  • Lehetőség az konverzió testreszabására.
    • A JsonSerializer és a JsonDeserializer implementálásával.
  • @Expose - kiiktat egy mezőt a sorosításból
  • A transient kulcsszóval ellátott mezők nem kerülnek sorosításra.
  • Képes kezelni nem alaptípusokat is:
  • Például dátumok, időpontok
public class MyObject {
    private String name;
    // Ez a mező nem kerül sorosításra:
    private transient int age;
}
import com.google.gson.annotations.Expose;
 
public class MyObject {
    @Expose
    private String name;
    // Ez a mező nem kerül sorosításra:
    @Expose(serialize = false)
    private int age;
}

JSON tartalom

Legyen egy JSON tartalom, amit valamilyen REST API-val kiszolgálunk. Lehet például Node.js csomag: json-server vagy hai-server.

employees.json
{
    "employees": [
        {
            "id": 1,
            "name": "Nagy János",
            "city": "Szolnok",
            "salary": 8400000
        },
        {
            "id": 2,
            "name": "Páros Lajos",
            "city": "Szeged",
            "salary": 3430000
        },
        {
            "id": 3,
            "name": "Aranyos Enikő",
            "city": "Szolnok",
            "salary": 4245000
        }        
    ]    
}

Dolgozók lekérése

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;
    }    
}
HttpClient.java
import java.io.IOException;
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 HttpClient {
 
    public String getData(String urlStr) {
        String text = null;
        try {
            text = tryGetData(urlStr);
        } catch (IOException e) {
            System.err.println("Hiba! A lekérés sikertelen!");
            System.err.println(e.getMessage());
        }
        return text;
    }
    public String tryGetData(String urlStr) throws IOException {
        URL url = new URL(urlStr);
        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);
        }
        return text;
    }
    public ArrayList<Employee> getEmployees() {
        String urlStr = "http://[::1]:8000/employees";
        String text = this.getData(urlStr);
        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));
        return list;
    }
}
Client.java
import java.util.ArrayList;
 
public class Client {
    public void printEmps() {
        System.out.println("REST API lekérés");
 
        HttpClient http = new HttpClient();
        ArrayList<Employee> list = http.getEmployees();
        for(Employee employee: list) {
            System.out.println(employee.name);
        }        
    }    
}
App.java
public class App {
    public static void main(String[] args) throws Exception {
        new Client().printEmps();;
    }
}

Token küldése

URL url = new URL("http://localhost:8000/api/valami");
String token = "as3klaj334lkdfj";
 
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("Authorization","Bearer " + token);       
con.setRequestProperty("Content-Type","application/json");
con.setRequestMethod("POST");

Példa projekt

oktatas/programozas/java/java_rest_api_kliens/gson.txt · Utolsó módosítás: 2024/11/04 07:33 szerkesztette: admin