Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में @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"}

फिल्टर के प्रकार

फिल्टर विवरण उदाहरण
filterOutAllExcept()निर्दिष्ट फील्ड्स के अलावा सभी को एक्सक्लूड करेंfilterOutAllExcept("name", "id")
serializeAllExcept()निर्दिष्ट फील्ड्स को छोड़कर सभी को सीरियलाइज करेंserializeAllExcept("password", "ssn")
filterOutAll()सभी फील्ड्स को एक्सक्लूड करेंfilterOutAll()
serializeAll()सभी फील्ड्स को सीरियलाइज करें (डिफ़ॉल्ट)serializeAll()

डायनामिक फिल्टरिंग

// रनटाइम पर फिल्टर निर्णय
SimpleBeanPropertyFilter filter = new SimpleBeanPropertyFilter() {
    @Override
    public void serializeAsField(Object pojo, JsonGenerator jgen, 
                                 SerializerProvider provider, PropertyWriter writer) 
            throws Exception {
        if (isAllowed(writer.getName())) {
            writer.serializeAsField(pojo, jgen, provider);
        }
    }
    
    @Override
    protected boolean include(BeanPropertyWriter writer) {
        return isAllowed(writer.getName());
    }
    
    private boolean isAllowed(String name) {
        // रनटाइम लॉजिक (उदाहरण: यूजर रोल, परमिशन)
        return !name.equals("password");
    }
};

मल्टीपल फिल्टर्स

FilterProvider filters = new SimpleFilterProvider()
    .addFilter("userFilter", filterOutAllExcept("name", "email"))
    .addFilter("adminFilter", serializeAll())
    .setFailOnUnknownId(false); // अज्ञात फिल्टर ID पर फेल न करें

// राइटर के साथ उपयोग
mapper.writer(filters).writeValueAsString(user);

उपयोग के मामले

  • सिक्योरिटी: संवेदनशील डेटा (पासवर्ड, SSN, टोकन) छिपाना
  • API वर्जनिंग: अलग-अलग क्लाइंट्स के लिए अलग फील्ड्स
  • रोल-बेस्ड व्यूज: एडमिन vs यूजर vs पब्लिक व्यू
  • परफॉरमेंस: बड़े ऑब्जेक्ट्स से अनावश्यक फील्ड्स को एक्सक्लूड करना

नोट

@JsonFilter डायनामिक फिल्टरिंग के लिए शक्तिशाली है लेकिन @JsonView या @JsonIgnore की तुलना में अधिक जटिल है। सरल केसेस के लिए @JsonView पर विचार करें।

  1. Java 9 में destroyForcibly() मेथड का महत्व Java 9 में destroyForcibly() मेथड का महत्व

    Java 9 ने Process क्लास में destroyForcibly() मेथड पेश किया जो प्रक्रियाओं को बलपूर्वक समाप्त करने का एक विश्वसनीय तरीका प्रदान करता है जब सामान्य destroy() (विनम्र समाप्ति) विफल हो जाता है या बहुत धीमा होता है। destroy() बनाम destroyForcibly() पहलूdestroy()destroyForcibly() सिग्नलSIGTERM

  1. Java में FocusListener इंटरफेस का महत्व क्या है? Java में FocusListener इंटरफेस का महत्व क्या है?

    FocusListener फोकस इवेंट्स तब उत्पन्न होते हैं जब भी कोई कंपोनेंट कीबोर्ड फोकस प्राप्त करता है या खो देता है। फोकस इवेंट्स को दर्शाने वाले ऑब्जेक्ट्स FocusEvent क्लास से बनाए जाते हैं। FocusEvent क्लास के लिए संबंधित लिसनर इंटरफेस FocusListener इंटरफेस है। FocusEvent के लिए प्रत्येक लिसनर FocusList

  1. - Java में Downcasting

    हां, एक वेरिएबल को कास्टिंग द्वारा इसके निचले रेंज के विकल्प में डाउनकास्ट किया जा सकता है। इससे डेटा लॉस हो सकता है। नीचे उदाहरण देखें −उदाहरणpublic class Tester { public static void main(String[] args) { int a = 300; byte b = (byte)a; System.out.println(b); }