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 আরো উন্নত করা যেতে পারে।
Read more