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

জাভাতে @JsonFilter অ্যানোটেশনের গুরুত্ব

@JsonFilter অ্যানোটেশন জাভা অবজেক্ট সিরিয়ালাইজ করতে কাস্টম ফিল্টার ডিফাইন করতে ব্যবহৃত হয়। FilterProvider ক্লাস ব্যবহার করে ফিল্টার ডিফাইন করতে হয় এবং একচুয়াল ফিল্টার ইনস্ট্যান্স পেতে হয়। এখন FilterProvider-কে ObjectMapper ক্লাসে অ্যাসাইন করে ফিল্টার কনফিগার করা হয়।

সিনট্যাক্স

@Target(value={ANNOTATION_TYPE,TYPE,METHOD,FIELD,PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonFilter

উদাহরণ

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

public class JsonFilterAnnotationTest {
    public static void main(String args[]) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filterProvider = new SimpleFilterProvider().addFilter("customFilter", 
            SimpleBeanPropertyFilter.filterOutAllExcept("empName"));
        String jsonString = mapper.writer(filterProvider).writeValueAsString(new FilterBean());
        System.out.println(jsonString);
    }
}

@JsonFilter("customFilter")
class FilterBean {
    public int empId = 110;
    public String empName = "Raja Ramesh";
    public String gender = "male";
}

আউটপুট

{"empName":"Raja Ramesh"}

ব্যবহার ক্ষেত্র

  • ডাইনামিক ফিল্ড সিলেকশন: রানটাইমে ডিসাইড করা যায় কোন ফিল্ড সিরিয়ালাইজ হবে
  • রোল-বেসড সিরিয়ালাইজেশন: অ্যাডমিন দেখে সব ফিল্ড, ইউজার দেখে লিমিটেড ফিল্ড
  • একই ক্লাসের ভিন্ন ভিন্ন ভিউ (পাবলিক/প্রাইভেট API)

আরও ফিল্টার অপশন

// শুধু নির্দিষ্ট ফিল্ড ইনক্লুড
SimpleBeanPropertyFilter.filterOutAllExcept("field1", "field2")

// নির্দিষ্ট ফিল্ড এক্সক্লুড
SimpleBeanPropertyFilter.serializeAllExcept("password", "secret")

// কাস্টম লজিক
new SimpleBeanPropertyFilter() {
    @Override
    public void serializeAsField(Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) {
        if (someCondition) writer.serializeAsField(pojo, jgen, provider);
    }
}
  1. জাভাতে HashSet-এর গুরুত্ব

  2. জাভা ৯-এ destroyForcibly() মেথডের গুরুত্ব

  3. জাভাতে FocusListener ইন্টারফেসের গুরুত্ব

  4. জাভাতে ডাউনকাস্টিং