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