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

जावा में @JsonSerialize एनोटेशन का उपयोग करके कस्टम सीरियलाइज़र कैसे इम्प्लीमेंट करें

@JsonSerialize एनोटेशन का उपयोग फील्ड की सीरियलाइजेशन के दौरान कस्टम सीरियलाइज़र घोषित करने के लिए किया जाता है। हम StdSerializer क्लास को एक्सटेंड करके और StdSerializer क्लास के serialize() मेथड को ओवरराइड करके एक कस्टम सीरियलाइज़र इम्प्लीमेंट कर सकते हैं।

सिंटैक्स

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

उदाहरण

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.ser.std.*;

public class JsonSerializeAnnotationTest {
    public static void main(String[] args) throws JsonProcessingException, IOException {
        Employee emp = new Employee(115, "Adithya", new String[] {"Java", "Python", "Scala"});
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
        System.out.println(jsonString);
    }
}

// CustomSerializer क्लास
class CustomSerializer extends StdSerializer<Employee> {
    public CustomSerializer(Class<Employee> t) {
        super(t);
    }
    
    public CustomSerializer() {
        this(Employee.class);
    }
    
    @Override
    public void serialize(Employee emp, JsonGenerator jgen, SerializerProvider sp) 
            throws IOException, JsonGenerationException {
        StringBuilder sb = new StringBuilder();
        jgen.writeStartObject();
        jgen.writeNumberField("id", emp.getId());
        jgen.writeStringField("name", emp.getName());
        for(String s : emp.getLanguages()) {
            sb.append(s).append(";");
        }
        jgen.writeStringField("languages", sb.toString());
        jgen.writeEndObject();
    }
}

// Employee क्लास
@JsonSerialize(using=CustomSerializer.class)
class Employee {
    private int id;
    private String name;
    private String[] languages;
    
    public Employee(int id, String name, String[] languages) {
        this.id = id;
        this.name = name;
        this.languages = languages;
    }
    
    public int getId() { return this.id; }
    public String getName() { return this.name; }
    public String[] getLanguages() { return this.languages; }
    
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("ID: ").append(this.id)
            .append("\nName: ").append(this.name).append("\nLanguages:");
        for(String s : this.languages) {
            sb.append(" ").append(s);
        }
        return sb.toString();
    }
}

आउटपुट

{
  "id" : 115,
  "name" : "Adithya",
  "languages" : "Java;Python;Scala;"
}

कस्टम सीरियलाइज़र के मुख्य घटक

  • JsonGenerator: JSON लिखने के लिए (writeStartObject(), writeStringField(), writeNumberField(), आदि)
  • SerializerProvider: अन्य सीरियलाइज़र्स, कॉन्फिगरेशन तक पहुंच के लिए
  • StdSerializer<T>: जेनेरिक बेस क्लास टाइप-सेफ सीरियलाइजेशन के लिए

उन्नत उपयोग

// फील्ड लेवल पर
public class User {
    @JsonSerialize(using = CustomDateSerializer.class)
    private Date birthDate;
}

// कलेक्शन कंटेंट के लिए
@JsonSerialize(contentUsing = CustomItemSerializer.class)
List<Item> items;

// कंस्ट्रक्टर के साथ (Jackson 2.12+)
@JsonSerialize(using = CustomSerializer.class)
public record Employee(int id, String name, String[] languages) {}

JsonGenerator उपयोगी मेथड्स

मेथड विवरण
writeStartObject() / writeEndObject()JSON ऑब्जेक्ट शुरू/समाप्त करें
writeStartArray() / writeEndArray()JSON ऐरे शुरू/समाप्त करें
writeStringField(name, value)स्ट्रिंग फील्ड लिखें
writeNumberField(name, value)नंबर फील्ड लिखें (int, long, double, आदि)
writeBooleanField(name, value)बूलियन फील्ड लिखें
writeNullField(name)नल फील्ड लिखें
writeFieldName(name)फील्ड नाम लिखें (मैन्युअल वैल्यू के लिए)

कब उपयोग करें

  • कॉम्प्लेक्स ऑब्जेक्ट को सिंपल फॉर्मेट में सीरियलाइज करना (जैसे ऐरे को सेमीकोलन-सेपरेटेड स्ट्रिंग)
  • कंप्यूटेड/डेराइव्ड प्रॉपर्टीज जोड़ना
  • थर्ड-पार्टी API के लिए स्पेसिफिक JSON फॉर्मेट
  • सेंसिटिव डेटा मास्किंग/ट्रांसफॉर्मेशन
  1. Java का उपयोग करके OpenCV में गाउशियन ब्लर कैसे लागू करें? Java का उपयोग करके OpenCV में गाउशियन ब्लर कैसे लागू करें?

    आप लो-पास फिल्टर का उपयोग करके छवि को फ़िल्टर करके ब्लर कर सकते हैं, यह छवि से उच्च आवृत्ति सामग्री (शोर, किनारे) को हटा देता है। गाउशियन ब्लरिंग OpenCV द्वारा प्रदान की जाने वाली ब्लरिंग तकनीकों में से एक है, यह छवि के शोर को हटाने में अत्यधिक कुशल है। यह कर्नेल क्षेत्र में सभी पिक्सेल्स के औसत के

  1. Java का उपयोग करके OpenCV में ब्लर (एवरेजिंग) कैसे लागू करें? Java का उपयोग करके OpenCV में ब्लर (एवरेजिंग) कैसे लागू करें?

    आप लो-पास फिल्टर का उपयोग करके छवि को फ़िल्टर करके ब्लर कर सकते हैं, यह छवि से उच्च आवृत्ति सामग्री (शोर, किनारे) को हटा देता है। एवरेजिंग OpenCV द्वारा प्रदान की जाने वाली ब्लरिंग तकनीकों में से एक है, यह कर्नेल क्षेत्र में सभी पिक्सेल्स के औसत के साथ केंद्रीय तत्व को प्रतिस्थापित करता है। आप blur

  1. Java में JWindow का उपयोग करके स्प्लैश स्क्रीन कैसे लागू करें? Java में JWindow का उपयोग करके स्प्लैश स्क्रीन कैसे लागू करें?

    एक JWindow एक कंटेनर है जिसे यूज़र के डेस्कटॉप पर कहीं भी प्रदर्शित किया जा सकता है। इसमें JFrame की तरह टाइटल बार, विंडो मैनेजमेंट बटन्स आदि नहीं होते। JWindow में एकमात्र चाइल्ड क्लास के रूप में JRootPane होता है। contentPane JWindow के किसी भी बच्चे का पैरेंट हो सकता है। JFrame की तरह, एक JWindo