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