Custom Error Message এবং Exception Handling

Gson এবং Error Handling - জিসন (Gson) - Java Technologies

358

Gson লাইব্রেরি ব্যবহারের সময় custom error messages এবং exception handling করা একটি গুরুত্বপূর্ণ দিক, কারণ JSON serialization/deserialization প্রক্রিয়ায় বিভিন্ন ধরনের সমস্যা দেখা দিতে পারে, যেমন invalid JSON format, type mismatch, বা missing fields। Gson সাধারণত JsonParseException বা JsonSyntaxException ছুঁড়ে দেয় যখন কোনো সমস্যা হয়, তবে আপনি custom error messages তৈরি করতে এবং এই ধরনের exceptions সুন্দরভাবে হ্যান্ডেল করতে পারেন।

এখানে, Gson এর exception handling এবং custom error messages হ্যান্ডল করার কিছু কৌশল তুলে ধরা হলো।


1. Custom Exception Handling in Gson

Gson ডিফল্টভাবে কিছু exception (যেমন JsonParseException, JsonSyntaxException) ছুঁড়ে দেয় যখন কিছু ভুল থাকে। আপনি কাস্টম exception handling ব্যবহার করে সেগুলিকে নিজের মতো করে প্রক্রিয়া করতে পারেন।

উদাহরণ: JsonParseException হ্যান্ডলিং

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        String invalidJson = "{name: 'John', age: 30}"; // Invalid JSON (missing quotes around key)

        try {
            Person person = gson.fromJson(invalidJson, Person.class);
        } catch (JsonSyntaxException e) {
            // Handle the error with a custom message
            System.out.println("Custom Error: Invalid JSON format. Please check the syntax.");
            e.printStackTrace();
        }
    }
}

class Person {
    String name;
    int age;
}

কোডের ব্যাখ্যা:

  • এখানে invalidJson একটি ভুল JSON স্ট্রিং যা সঠিকভাবে ফর্ম্যাট করা হয়নি (কী গুলি কোডে উদ্ধৃতি চিহ্নে নেই)।
  • JsonSyntaxException এ ধরনের সমস্যা সনাক্ত করতে ব্যবহৃত হয়, এবং আপনি এটি try-catch ব্লকের মাধ্যমে হ্যান্ডল করতে পারেন।
  • custom error message প্রদান করা হয়েছে Custom Error: Invalid JSON format. Please check the syntax. এবং stack trace দেখানো হয়েছে।

আউটপুট:

Custom Error: Invalid JSON format. Please check the syntax.
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $
...

2. Custom Error Messages with JsonDeserializer

আপনি custom error messages সরাসরি JsonDeserializer ব্যবহার করে তৈরি করতে পারেন, যখন আপনি JSON ডেটাকে Java অবজেক্টে deserialize করেন।

উদাহরণ: Custom Error Messages with JsonDeserializer

import com.google.gson.*;
import java.lang.reflect.Type;

public class Main {
    public static void main(String[] args) {
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(Person.class, new PersonDeserializer())
                        .create();

        String invalidJson = "{\"name\":\"John\", \"age\":\"twenty\"}";  // Invalid age

        try {
            Person person = gson.fromJson(invalidJson, Person.class);
            System.out.println(person);
        } catch (JsonParseException e) {
            // Custom error message
            System.out.println("Custom Error: Failed to deserialize JSON due to invalid data type for 'age'.");
            e.printStackTrace();
        }
    }
}

// Person class
class Person {
    String name;
    int age;

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}

// Custom JsonDeserializer for Person class
class PersonDeserializer implements JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("name").getAsString();

        try {
            int age = jsonObject.get("age").getAsInt(); // Trying to parse age
            return new Person(name, age);
        } catch (NumberFormatException e) {
            // Handle invalid data type error with a custom message
            throw new JsonParseException("Custom Error: Invalid data type for 'age'. Expected an integer.", e);
        }
    }
}

কোডের ব্যাখ্যা:

  • PersonDeserializer কাস্টম JsonDeserializer তৈরি করা হয়েছে, যেখানে আমরা age ফিল্ডের জন্য NumberFormatException ক্যাচ করেছি, যদি JSON ডেটাতে age ফিল্ডের মান সঠিক সংখ্যায় না হয়।
  • কাস্টম JsonParseException তৈরি করে আমরা custom error message প্রদান করেছি: "Custom Error: Invalid data type for 'age'. Expected an integer."

আউটপুট:

Custom Error: Failed to deserialize JSON due to invalid data type for 'age'.
com.google.gson.JsonParseException: Custom Error: Invalid data type for 'age'. Expected an integer.

3. JsonReader এর মাধ্যমে Custom Error Messages

যখন আপনি JsonReader দিয়ে JSON ডেটা স্ট্রিমের মাধ্যমে পড়ছেন, তখন আপনি JsonReader এর beginObject(), endObject(), nextName() ইত্যাদি মেথডগুলো ব্যবহার করে কাস্টম exception handling করতে পারেন।

উদাহরণ: JsonReader দিয়ে Custom Error Messages

import com.google.gson.stream.JsonReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        String invalidJson = "{\"name\": \"John\", \"age\": \"twenty\"}";  // Invalid JSON format for 'age'
        JsonReader reader = new JsonReader(new StringReader(invalidJson));

        try {
            reader.beginObject();  // Start reading the JSON object
            while (reader.hasNext()) {
                String name = reader.nextName();

                if (name.equals("name")) {
                    String value = reader.nextString();
                    System.out.println("Name: " + value);
                } else if (name.equals("age")) {
                    try {
                        int age = reader.nextInt();  // Trying to read 'age' as an integer
                        System.out.println("Age: " + age);
                    } catch (NumberFormatException e) {
                        throw new JsonParseException("Custom Error: Invalid data type for 'age'. Expected an integer.", e);
                    }
                }
            }
            reader.endObject();
        } catch (IOException | JsonParseException e) {
            // Handle exceptions
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

কোডের ব্যাখ্যা:

  • JsonReader ব্যবহার করে JSON স্ট্রিম থেকে একে একে ডেটা পড়া হচ্ছে।
  • যদি age ফিল্ডের জন্য NumberFormatException ঘটে (যেমন, যদি এটি একটি স্ট্রিং হয়), তাহলে আমরা একটি কাস্টম JsonParseException ছুঁড়ে দিচ্ছি এবং কাস্টম error message প্রদান করছি।

আউটপুট:

Custom Error: Invalid data type for 'age'. Expected an integer.
com.google.gson.JsonParseException: Custom Error: Invalid data type for 'age'. Expected an integer.

4. Custom Exception Handling for Missing Fields

আপনি required fields এর জন্য কাস্টম exception handling করতে পারেন, যেখানে missing fields এর জন্য একটি কাস্টম ত্রুটি তৈরি করা হয়।

উদাহরণ: Missing Fields এর জন্য Custom Exception

import com.google.gson.*;

public class Main {
    public static void main(String[] args) {
        Gson gson = new Gson();

        String invalidJson = "{\"name\": \"John\"}";  // Missing 'age' field

        try {
            Person person = gson.fromJson(invalidJson, Person.class);
            if (person.getAge() == 0) {  // Check if age is missing or invalid
                throw new JsonParseException("Custom Error: Missing required field 'age'.");
            }
            System.out.println(person);
        } catch (JsonParseException e) {
            // Handle the error with a custom message
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

কোডের ব্যাখ্যা:

  • Missing Fields: আমরা একটি JSON ডেটা দিয়ে ডেসেরিয়ালাইজ করেছি যেখানে age ফিল্ডটি অনুপস্থিত।
  • JsonParseException ছুঁড়ে দেওয়া হয়েছে যদি age ফিল্ডটি missing থাকে বা invalid হয়।

আউটপুট:

Custom Error: Missing required field 'age'.
com.google.gson.JsonParseException: Custom Error: Missing required field 'age'.

  • Custom error messages এবং exception handling Gson এর সাথে কাজ করার সময় গুরুত্বপূর্ণ, বিশেষ করে যখন ডেটার ফরম্যাট, টাইপ বা অন্যান্য বিষয়গত সমস্যা ঘটে।
  • JsonParseException, JsonSyntaxException, এবং NumberFormatException এর মতো সাধারণ ত্রুটিগুলি কাস্টম মেসেজ সহ হ্যান্ডল করতে পারলে ব্যবহারকারীদের জন্য আরো সহায়ক এবং সুস্পষ্ট ত্রুটি বার্তা প্রদান করা সম্ভব।
  • JsonDeserializer, JsonReader, এবং TypeAdapter এর মাধ্যমে কাস্টম exception handling আরো উন্নত করা যেতে পারে।
Content added By
Promotion

Are you sure to start over?

Loading...