কম্পিউটার টিউটোরিয়াল

ExclusionStrategy ইন্টারফেস ব্যবহার করে JSON সিরিয়ালাইজ/ডিসিরিয়ালাইজ

ExclusionStrategy ইন্টারফেস সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশনের সময় যেকোনো ফিল্ড এক্সক্লুড করতে ব্যবহৃত হয়। ExclusionStrategy ইন্টারফেসের কাস্টম ইমপ্লিমেন্টেশন প্রদান করে GsonBuilder-এ setExclusionStrategies() মেথড দিয়ে রেজিস্টার করতে হয়। এটি Gson কনফিগার করে সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশনের সময় এক্সক্লুশন স্ট্র্যাটেজি প্রয়োগ করতে।

সিনট্যাক্স

public GsonBuilder setExclusionStrategies(ExclusionStrategy... strategies)

উদাহরণ

import com.google.gson.*;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;

public class ExclusionStrategyTest {
    public static void main(String args[]) throws Exception {
        Gson gson = new GsonBuilder().setExclusionStrategies(new CustomExclusionStrategy()).create();
        
        Person person = new Person();
        person.setFirstName("Adithya");
        person.setLastName("Sai");
        person.setAddress("Hyderabad");
        
        String jsonString = gson.toJson(person);
        System.out.println("Serialize a JSON: \n" + jsonString);
        
        String inputJson = "{\"firstName\":\"Raja\", \"lastName\":\"Ramesh\", \"address\":\"Hyderabad\"}";
        person = gson.fromJson(inputJson, Person.class);
        System.out.println("Deserialize a JSON:\n" + person);
    }
}

// CustomExclusionStrategy class
class CustomExclusionStrategy implements ExclusionStrategy {
    public boolean shouldSkipField(FieldAttributes f) {
        if(f.getName().equals("firstName")) {
            return true; // এই ফিল্ড বাদ দাও
        }
        return false;
    }
    
    public boolean shouldSkipClass(Class aClass) {
        return false; // কোনো ক্লাস বাদ দেয় না
    }
}

// Person class
class Person {
    private String firstName, lastName, address;
    
    public String getFirstName() { return firstName; }
    public void setFirstName(String firstName) { this.firstName = firstName; }
    public String getLastName() { return lastName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
    public String getAddress() { return address; }
    public void setAddress(String address) { this.address = address; }
    
    public String toString() {
        return "Person [" + firstName + " " + lastName + " " + address + "]";
    }
}

আউটপুট

Serialize a JSON: {"lastName":"Sai","address":"Hyderabad"}
Deserialize a JSON: Person [null Ramesh Hyderabad]

ব্যাখ্যা

  • shouldSkipField(): true রিটার্ন করলে সে ফিল্ড সিরিয়ালাইজ/ডিসিরিয়ালাইজ হবে না
  • shouldSkipClass(): true রিটার্ন করলে পুরো ক্লাস বাদ যাবে
  • সিরিয়ালাইজেশনে: firstName বাদ গেলো
  • ডিসিরিয়ালাইজেশনে: firstName ইনপুট JSON-এ থাকলেও বাদ গেলো (null रहा)

আধুনিক বিকল্প (Jackson)

// @JsonIgnoreProperties
@JsonIgnoreProperties({"firstName"})
class Person { ... }

// ডাইনামিক
ObjectMapper mapper = new ObjectMapper();
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.serializeAllExcept("firstName");
FilterProvider filters = new SimpleFilterProvider().addFilter("personFilter", filter);
mapper.writer(filters).writeValueAsString(person);
  1. জাভাতে JsonPointer ইন্টারফেস ব্যবহার করে কী-এর মান কীভাবে পাবেন?

  2. জাভাতে JsonPatch ইন্টারফেসের গুরুত্ব কী?

  3. জাভাতে Gson লাইব্রেরি ব্যবহার করে JSON স্ট্রিং ফাইলে লেখার পদ্ধতি

  4. জাভাতে JSON ফাইলের কন্টেন্ট কীভাবে পড়বেন?