Custom Filters তৈরি এবং ব্যবহার

@JsonFilter এবং Dynamic Filtering - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

335

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 এর মধ্যে পার্থক্য

বৈশিষ্ট্য@JsonFilterSimpleFilterProvider
প্রয়োগের উদ্দেশ্যJSON ডেটা ফিল্টার করার জন্য ফিল্টার নির্ধারণ করাডাইনামিকভাবে ফিল্টার কনফিগারেশন এবং ফিল্টারদের সংজ্ঞায়িত করা
ব্যবহারসরাসরি ক্লাসের উপর ফিল্টার ব্যবহৃত হয়ObjectMapper এর সাথে ফিল্টার অ্যাপ্লাই করা হয়
ডায়নামিক ফিল্টারিংফিল্টার আগেই নির্ধারিত থাকে, তবে Dynamic ক্ষেত্রের জন্য SimpleFilterProvider প্রয়োজন হতে পারেডাইনামিক শর্ত এবং একাধিক ফিল্টারের জন্য উপযোগী

  1. Jackson Custom Filters JSON Serialization এবং Deserialization-এর সময় অজানা বা অপ্রয়োজনীয় ফিল্ডগুলো ফিল্টার করতে ব্যবহার করা হয়।
  2. @JsonFilter এবং SimpleFilterProvider এর মাধ্যমে Jackson এ কাস্টম ফিল্টার তৈরি ও প্রয়োগ করা হয়।
  3. Dynamic Filtering ব্যবহার করে আপনি চলমান ডেটার উপর শর্ত ভিত্তিক ফিল্টার প্রয়োগ করতে পারেন।

Jackson এ Custom Filters দিয়ে আপনি JSON আউটপুট বা ইনপুটকে আরও নিয়ন্ত্রণযোগ্য এবং কাস্টমাইজড করতে পারেন, যা বড় প্রকল্পে ফিল্ড ম্যানিপুলেশন এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...