Jackson Annotations: Custom Filters তৈরি এবং ব্যবহার
Jackson Custom Filters ব্যবহার করা হয় JSON Serialization এবং Deserialization এর সময় ডেটার নির্দিষ্ট অংশ ফিল্টার করার জন্য। এটি বিশেষভাবে উপকারী যখন আপনি JSON আউটপুট থেকে কিছু ফিল্ড বা প্রোপার্টি বাদ দিতে চান বা শুধুমাত্র নির্দিষ্ট অংশগুলো প্রসেস করতে চান।
Jackson এ custom filters তৈরি করতে @JsonFilter অ্যানোটেশন এবং SimpleFilterProvider ব্যবহার করা হয়। এই প্রক্রিয়াটি বিশেষত ডাইনামিকভাবে JSON ফিল্ডগুলোর উপস্থিতি নিয়ন্ত্রণ করতে কার্যকর।
Jackson এ Custom Filters তৈরি করার প্রক্রিয়া
ধাপ ১: @JsonFilter অ্যানোটেশন ব্যবহার
@JsonFilterঅ্যানোটেশনটি Jackson কে জানায় যে ফিল্টারিং এর জন্য কোন ফিল্টার অ্যাপ্লাই করা হবে।
ধাপ ২: SimpleFilterProvider ব্যবহার
SimpleFilterProviderব্যবহার করে আপনি নির্দিষ্ট ফিল্টার সেট করতে পারেন এবং ObjectMapper-এ সেট করতে পারেন।
Custom Filters তৈরি এবং ব্যবহার করার উদাহরণ
1. Custom Filter তৈরি
ধরা যাক, আমাদের একটি User ক্লাস রয়েছে এবং আমরা চাই JSON Serialization-এ password ফিল্ডটিকে ফিল্টার (অথবা বাদ) করতে।
Java Class Example:
import com.fasterxml.jackson.annotation.JsonFilter;
@JsonFilter("userFilter")
public class User {
private int id;
private String name;
private String password;
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2. Filter সেট করা এবং ObjectMapper ব্যবহার করা
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.FilterProvider;
public class CustomFilterExample {
public static void main(String[] args) throws Exception {
User user = new User(1, "Rahim", "secretPassword");
// ObjectMapper তৈরি এবং filter সেট করা
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("userFilter",
SimpleBeanPropertyFilter.serializeAllExcept("password"));
// Filtered JSON Serialization
String json = mapper.writer(filters).writeValueAsString(user);
System.out.println(json); // password ফিল্টার হয়ে যাবে
}
}
Output:
{
"id": 1,
"name": "Rahim"
}
এখানে, SimpleBeanPropertyFilter.serializeAllExcept("password") ব্যবহার করা হয়েছে, যা password ফিল্ডটিকে বাদ দেয় এবং বাকি সব ফিল্ড JSON-এ সংরক্ষণ করে।
SimpleFilterProvider এবং SimpleBeanPropertyFilter এর মাধ্যমে আরও কাস্টমাইজেশন
Jackson-এ আরও কাস্টম ফিল্টার তৈরি করতে, আপনি SimpleBeanPropertyFilter এর সাহায্যে নির্দিষ্ট প্রোপার্টি বা শর্ত অনুযায়ী ফিল্টার করতে পারেন।
3. Serialize Only Specific Fields
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
public class CustomFilterExample {
public static void main(String[] args) throws Exception {
User user = new User(1, "Rahim", "secretPassword");
// ObjectMapper তৈরি এবং filter সেট করা
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("userFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));
// Filtered JSON Serialization
String json = mapper.writer(filters).writeValueAsString(user);
System.out.println(json); // শুধু id এবং name ফিল্ডগুলো থাকবে
}
}
Output:
{
"id": 1,
"name": "Rahim"
}
এখানে, SimpleBeanPropertyFilter.filterOutAllExcept("id", "name") ব্যবহার করা হয়েছে, যা password ফিল্ড বাদ দিয়ে শুধু id এবং name ফিল্ডগুলো JSON-এ সেরিয়ালাইজ করবে।
4. Complex Filters with Dynamic Criteria
Jackson ফিল্টারিংয়ের মাধ্যমে আপনি আরও জটিল শর্তও নির্ধারণ করতে পারেন, যেমন শুধুমাত্র নির্দিষ্ট টাইপের অবজেক্টের জন্য ফিল্টার প্রয়োগ করা।
Example of Conditional Filtering:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
public class ConditionalFilteringExample {
public static void main(String[] args) throws Exception {
User user = new User(1, "Rahim", "secretPassword");
// Condition: Only serialize 'password' if 'name' is "Rahim"
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("userFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name", "password"));
// Filtered JSON Serialization
String json = mapper.writer(filters).writeValueAsString(user);
System.out.println(json); // Custom condition filtering
}
}
@JsonFilter এবং SimpleFilterProvider এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | @JsonFilter | SimpleFilterProvider |
|---|---|---|
| প্রয়োগের উদ্দেশ্য | JSON ডেটা ফিল্টার করার জন্য ফিল্টার নির্ধারণ করা | ডাইনামিকভাবে ফিল্টার কনফিগারেশন এবং ফিল্টারদের সংজ্ঞায়িত করা |
| ব্যবহার | সরাসরি ক্লাসের উপর ফিল্টার ব্যবহৃত হয় | ObjectMapper এর সাথে ফিল্টার অ্যাপ্লাই করা হয় |
| ডায়নামিক ফিল্টারিং | ফিল্টার আগেই নির্ধারিত থাকে, তবে Dynamic ক্ষেত্রের জন্য SimpleFilterProvider প্রয়োজন হতে পারে | ডাইনামিক শর্ত এবং একাধিক ফিল্টারের জন্য উপযোগী |
- Jackson Custom Filters JSON Serialization এবং Deserialization-এর সময় অজানা বা অপ্রয়োজনীয় ফিল্ডগুলো ফিল্টার করতে ব্যবহার করা হয়।
@JsonFilterএবংSimpleFilterProviderএর মাধ্যমে Jackson এ কাস্টম ফিল্টার তৈরি ও প্রয়োগ করা হয়।- Dynamic Filtering ব্যবহার করে আপনি চলমান ডেটার উপর শর্ত ভিত্তিক ফিল্টার প্রয়োগ করতে পারেন।
Jackson এ Custom Filters দিয়ে আপনি JSON আউটপুট বা ইনপুটকে আরও নিয়ন্ত্রণযোগ্য এবং কাস্টমাইজড করতে পারেন, যা বড় প্রকল্পে ফিল্ড ম্যানিপুলেশন এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
Read more