Skill

Jackson এর মাধ্যমে কাস্টম Serializer এবং Deserializer তৈরি

জ্যাকসন (Jackson) - Java Technologies

307

Jackson হলো Java-তে ডেটা প্রসেসিংয়ের জন্য একটি শক্তিশালী এবং বহুল ব্যবহৃত লাইব্রেরি। এটি বিশেষ করে JSON ডেটা প্রসেসিংয়ের জন্য ব্যবহার করা হয়। আপনি Jackson ব্যবহার করে কাস্টম Serializer এবং Deserializer তৈরি করতে পারেন, যা আপনাকে JSON ডেটার ফরম্যাট বা ডেটা ম্যানিপুলেশনের ওপর আরও নিয়ন্ত্রণ দেয়। নিচে কিভাবে কাস্টম Serializer এবং Deserializer তৈরি করা যায় তার একটি উদাহরণ দেখানো হলো:


1. কাস্টম Serializer তৈরি করা

কাস্টম Serializer তৈরির জন্য আপনাকে JsonSerializer ক্লাসটি Extend করতে হবে এবং serialize মেথডটি Override করতে হবে।

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

// Custom Serializer Class
public class CustomSerializer extends JsonSerializer<MyObject> {
    @Override
    public void serialize(MyObject value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("customField", "CustomValue: " + value.getField());
        gen.writeEndObject();
    }
}

ObjectMapper-এ কাস্টম Serializer রেজিস্টার করুন:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;

public class Main {
    public static void main(String[] args) throws Exception {
        MyObject obj = new MyObject("TestValue");
        
        // Register custom serializer
        ObjectMapper mapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(MyObject.class, new CustomSerializer());
        mapper.registerModule(module);

        // Serialize
        String json = mapper.writeValueAsString(obj);
        System.out.println(json); // Output: {"customField":"CustomValue: TestValue"}
    }
}

2. কাস্টম Deserializer তৈরি করা

কাস্টম Deserializer তৈরির জন্য আপনাকে JsonDeserializer ক্লাসটি Extend করতে হবে এবং deserialize মেথডটি Override করতে হবে।

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;

// Custom Deserializer Class
public class CustomDeserializer extends JsonDeserializer<MyObject> {
    @Override
    public MyObject deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String customValue = p.readValueAsTree().get("customField").asText();
        String originalValue = customValue.replace("CustomValue: ", "");
        return new MyObject(originalValue);
    }
}

ObjectMapper-এ কাস্টম Deserializer রেজিস্টার করুন:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;

public class Main {
    public static void main(String[] args) throws Exception {
        String json = "{\"customField\":\"CustomValue: TestValue\"}";
        
        // Register custom deserializer
        ObjectMapper mapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addDeserializer(MyObject.class, new CustomDeserializer());
        mapper.registerModule(module);

        // Deserialize
        MyObject obj = mapper.readValue(json, MyObject.class);
        System.out.println(obj.getField()); // Output: TestValue
    }
}

3. MyObject ক্লাস

public class MyObject {
    private String field;

    public MyObject() {}

    public MyObject(String field) {
        this.field = field;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}

এইভাবে আপনি Jackson এর মাধ্যমে কাস্টম Serializer এবং Deserializer তৈরি করে JSON ডেটা প্রসেস করতে পারবেন। এটি বিশেষভাবে উপকারী যখন আপনার ডেটার ফরম্যাট কাস্টমাইজ করতে হবে বা ডেটা ট্রান্সফর্ম করতে হবে।

Content added By

Jackson লাইব্রেরি ব্যবহার করে Custom Serializer তৈরি করা খুবই কার্যকর, যখন আপনার একটি Object-কে JSON-এ Serialize করার সময় কিছু কাস্টম লজিক যোগ করার প্রয়োজন হয়। নীচে Custom Serializer তৈরি এবং ব্যবহারের একটি উদাহরণ দেওয়া হলো:


১. Custom Serializer তৈরি করার ধাপসমূহ:

  1. JsonSerializer ক্লাস Extend করুন: একটি Custom Serializer ক্লাস তৈরি করতে হবে যা JsonSerializer<T> ইন্টারফেসকে ইমপ্লিমেন্ট করে।
  2. serialize মেথড Override করুন: এখানে আপনি Object-কে JSON-এ কিভাবে Serialize করবেন তা নির্ধারণ করবেন।
  3. @JsonSerialize এনোটেশন ব্যবহার করুন: কাস্টম Serializer-কে Object ফিল্ড বা ক্লাসে প্রয়োগ করতে এই এনোটেশন ব্যবহার করতে হয়।

উদাহরণ: Custom Serializer

১. একটি ক্লাস তৈরি করুন

public class User {
    private int id;
    private String name;
    private String email;

    // Constructor
    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    // 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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

২. Custom Serializer তৈরি করুন

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class UserCustomSerializer extends JsonSerializer<User> {
    @Override
    public void serialize(User user, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeNumberField("userId", user.getId()); // Custom field name
        gen.writeStringField("fullName", user.getName().toUpperCase()); // Convert name to uppercase
        gen.writeStringField("contactEmail", user.getEmail()); // Custom field name
        gen.writeEndObject();
    }
}

৩. @JsonSerialize এনোটেশন ব্যবহার করে Serializer প্রয়োগ করুন

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(using = UserCustomSerializer.class)
public class User {
    // Same as above
}

৪. মেইন প্রোগ্রামে ব্যবহার

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            // Object তৈরি
            User user = new User(1, "Rahim", "rahim@example.com");

            // ObjectMapper ব্যবহার
            ObjectMapper objectMapper = new ObjectMapper();

            // Object থেকে JSON
            String jsonString = objectMapper.writeValueAsString(user);

            // JSON প্রিন্ট করুন
            System.out.println("Custom Serialized JSON: " + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

৫. আউটপুট

Custom Serialized JSON: {
  "userId": 1,
  "fullName": "RAHIM",
  "contactEmail": "rahim@example.com"
}

২. গুরুত্বপূর্ণ বিষয়:

  1. Custom Logic: কাস্টম Serializer-এ আপনি ফিল্ডের নাম পরিবর্তন, ডাটা ফরম্যাটিং, বা কিছু ডাটা বাদ দিতে পারবেন।
  2. Global Serializer: যদি একই Serializer একাধিক ক্লাস বা Object-এ ব্যবহার করতে চান, তবে আপনি SimpleModule ব্যবহার করে ObjectMapper-এ রেজিস্টার করতে পারেন।

    SimpleModule module = new SimpleModule();
    module.addSerializer(User.class, new UserCustomSerializer());
    objectMapper.registerModule(module);
    
  3. Complex Objects বা Collections: একই কৌশল ব্যবহার করে Complex Objects বা Collections-এর জন্যও Custom Serializer তৈরি করতে পারেন।

এভাবে Jackson ব্যবহার করে Custom Serializer তৈরি এবং প্রয়োগ করা যায়।

Content added By

Jackson আপনাকে JSON ডেটা থেকে Java অবজেক্ট তৈরি করার জন্য একটি Custom Deserializer তৈরি এবং ব্যবহার করার সুযোগ দেয়। এটি বিশেষভাবে দরকার হয় যখন JSON ফরম্যাট আপনার Java ক্লাসের সরাসরি ম্যাচ করে না বা বিশেষ ধরনের প্রক্রিয়াকরণ প্রয়োজন।


Custom Deserializer তৈরি করার ধাপ

Step 1: Maven Dependency

Jackson লাইব্রেরি যোগ করুন:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

Step 2: JSON উদাহরণ

ধরা যাক আমাদের JSON ফরম্যাটটি নিচের মতো:

{
  "full_name": "John Doe",
  "birth_year": 1995,
  "location": {
    "city": "Dhaka",
    "country": "Bangladesh"
  }
}

আমাদের Java ক্লাসের কাঠামো ভিন্ন:

class Person {
    private String name;
    private int age;
    private String city;

    // Constructors, Getters, and Setters
    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }

    // toString for display
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
    }
}

Step 3: Custom Deserializer তৈরি করা

Custom logic দিয়ে JSON ডেটা পার্স করার জন্য JsonDeserializer ক্লাসটি extend করতে হবে।

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;
import java.time.Year;

public class PersonDeserializer extends JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
        JsonNode node = parser.getCodec().readTree(parser);

        // Extract JSON fields
        String fullName = node.get("full_name").asText();
        int birthYear = node.get("birth_year").asInt();
        String city = node.get("location").get("city").asText();

        // Calculate age
        int currentYear = Year.now().getValue();
        int age = currentYear - birthYear;

        // Create and return Person object
        return new Person(fullName, age, city);
    }
}

Step 4: Custom Deserializer Map করা

@JsonDeserialize অ্যানোটেশন ব্যবহার করে Custom Deserializer ম্যাপ করতে হবে।

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

@JsonDeserialize(using = PersonDeserializer.class)
class Person {
    private String name;
    private int age;
    private String city;

    public Person(String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", city='" + city + "'}";
    }
}

Step 5: JSON থেকে Java অবজেক্টে রূপান্তর

ObjectMapper ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করুন।

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomDeserializerExample {
    public static void main(String[] args) throws Exception {
        String json = """
        {
          "full_name": "John Doe",
          "birth_year": 1995,
          "location": {
            "city": "Dhaka",
            "country": "Bangladesh"
          }
        }
        """;

        // ObjectMapper instance
        ObjectMapper objectMapper = new ObjectMapper();

        // Deserialize JSON to Person object
        Person person = objectMapper.readValue(json, Person.class);

        // Print the Person object
        System.out.println(person);
    }
}

Output

Person{name='John Doe', age=29, city='Dhaka'}

কীভাবে কাজ করে?

  1. Custom Deserializer (PersonDeserializer):
    • JSON ডেটা পড়ে এবং প্রয়োজনীয় প্রক্রিয়াকরণ (যেমন: জন্ম তারিখ থেকে বয়স গণনা) করে।
    • কাস্টম লজিক ব্যবহার করে Java অবজেক্ট তৈরি করে।
  2. Mapping:
    • @JsonDeserialize(using = PersonDeserializer.class) ব্যবহার করে ক্লাসটিতে Deserializer সেট করা হয়।
  3. ObjectMapper:
    • JSON ডেটা থেকে কাস্টম লজিকের মাধ্যমে Java অবজেক্ট তৈরি করে।

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

  • JSON ডেটার ফরম্যাট এবং Java অবজেক্টের কাঠামো ভিন্ন হলে।
  • বিশেষ ডেটা প্রক্রিয়াকরণের প্রয়োজন হলে (যেমন: তারিখ, সময়, বা কাস্টম লজিক)।
  • বড় এবং জটিল JSON ডেটা হ্যান্ডল করতে।

Jackson এর এই ক্ষমতা আপনার প্রজেক্টে JSON প্রসেসিং অনেক সহজ এবং কার্যকর করে তুলবে।

Content added By

Java-তে Serializer এবং Deserializer ব্যবহার করে ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময় কনফিগারেশন খুব গুরুত্বপূর্ণ। এটি ডেটা ফরম্যাট, সিকিউরিটি, পারফরম্যান্স এবং কাস্টম প্রয়োজনীয়তার উপর নির্ভর করে কনফিগারেশন সেটআপ করা সম্ভব করে।


Serializer Configuration

Serializer ব্যবহার করে Java অবজেক্টকে ডেটা ফরম্যাটে রূপান্তরিত করা হয় (যেমন, JSON, XML, বা বাইনারি)। কনফিগারেশনে নিম্নলিখিত বিষয়গুলো বিবেচনা করা হয়:

১. Java Serialization (Default)

  • ডিফল্টভাবে, ObjectOutputStream অবজেক্টকে বাইনারি ফরম্যাটে সিরিয়ালাইজ করে।
  • নির্দিষ্ট ফিল্ড বাদ দিতে transient কিওয়ার্ড ব্যবহার করা হয়।
  • Custom Configuration:

    private void writeObject(ObjectOutputStream oos) throws IOException {
        oos.defaultWriteObject(); // ডিফল্ট সিরিয়ালাইজেশন
        oos.writeObject(customData); // কাস্টম ডেটা যোগ করা
    }
    

২. JSON Serialization

  • জনপ্রিয় লাইব্রেরি: Jackson, Gson
  • Jackson Serializer Configuration:

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // null ভ্যালু বাদ দিন
    mapper.enable(SerializationFeature.INDENT_OUTPUT); // ফরম্যাটিং
    String json = mapper.writeValueAsString(object);
    

৩. XML Serialization

  • জনপ্রিয় লাইব্রেরি: JAXB, XStream
  • JAXB Configuration:

    JAXBContext context = JAXBContext.newInstance(MyClass.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // সুন্দর ফরম্যাট
    marshaller.marshal(object, new File("output.xml"));
    

৪. Custom Serializer

  • সংবেদনশীল ডেটা এনক্রিপ্ট করা বা নির্দিষ্ট ফরম্যাটে রূপান্তর করতে কাস্টম লজিক ব্যবহার করা হয়।

    public class CustomSerializer extends StdSerializer<MyClass> {
        @Override
        public void serialize(MyClass value, JsonGenerator gen, SerializerProvider provider) throws IOException {
            gen.writeStartObject();
            gen.writeStringField("name", value.getName().toUpperCase()); // ডেটা কাস্টমাইজ করা
            gen.writeEndObject();
        }
    }
    

Deserializer Configuration

Deserializer ডেটা ফরম্যাট (যেমন JSON, XML, বা বাইনারি) থেকে Java অবজেক্টে রূপান্তর করে। কনফিগারেশনে ডেটা যাচাই, ফিল্ড ম্যাপিং, এবং বিশেষ ডেটা টাইপের জন্য নিয়ম প্রয়োগ করা হয়।

১. Java Deserialization (Default)

  • ObjectInputStream ব্যবহার করে বাইনারি ডেটা পুনরুদ্ধার করা হয়।
  • Custom Configuration:

    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
        ois.defaultReadObject(); // ডিফল্ট ডেসিরিয়ালাইজেশন
        customData = (String) ois.readObject(); // কাস্টম ডেটা পুনরুদ্ধার
    }
    

২. JSON Deserialization

  • Jackson Deserializer Configuration:

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // অজানা প্রপার্টি এড়িয়ে যান
    MyClass obj = mapper.readValue(jsonString, MyClass.class);
    

৩. XML Deserialization

  • JAXB Configuration:

    JAXBContext context = JAXBContext.newInstance(MyClass.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    MyClass object = (MyClass) unmarshaller.unmarshal(new File("input.xml"));
    

৪. Custom Deserializer

  • নির্দিষ্ট ফিল্ড ভ্যালিডেশন বা কাস্টম ফরম্যাটে ডেটা ম্যাপ করার জন্য কাস্টম ডেসিরিয়ালাইজার প্রয়োজন।

    public class CustomDeserializer extends StdDeserializer<MyClass> {
        @Override
        public MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            JsonNode node = p.getCodec().readTree(p);
            String name = node.get("name").asText().toLowerCase(); // কাস্টম ডেটা প্রক্রিয়াকরণ
            return new MyClass(name);
        }
    }
    

Serializer এবং Deserializer কনফিগারেশনের উপযোগিতা

  1. ডেটা নিরাপত্তা: সংবেদনশীল ডেটা এনক্রিপ্ট ও ডিক্রিপ্ট করা।
  2. ফরম্যাট কাস্টমাইজেশন: JSON, XML, বা অন্যান্য ফরম্যাট অনুযায়ী ডেটা সিরিয়ালাইজ/ডেসিরিয়ালাইজ করা।
  3. ভ্যালিডেশন: ডেসিরিয়ালাইজেশনের সময় ডেটার গঠন এবং মান যাচাই করা।
  4. পারফরম্যান্স: নির্দিষ্ট ফিল্ড বাদ দিয়ে পারফরম্যান্স বাড়ানো।

Jackson Serializer এবং Deserializer ব্যবহার

Serializer:

public class CustomSerializer extends StdSerializer<MyClass> {
    public CustomSerializer() {
        super(MyClass.class);
    }

    @Override
    public void serialize(MyClass value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("name", "Mr. " + value.getName());
        gen.writeEndObject();
    }
}

Deserializer:

public class CustomDeserializer extends StdDeserializer<MyClass> {
    public CustomDeserializer() {
        super(MyClass.class);
    }

    @Override
    public MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonNode node = p.getCodec().readTree(p);
        String name = node.get("name").asText().replace("Mr. ", ""); // নাম থেকে "Mr." বাদ দেয়া
        return new MyClass(name);
    }
}

ObjectMapper Configuration:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(MyClass.class, new CustomSerializer());
module.addDeserializer(MyClass.class, new CustomDeserializer());
mapper.registerModule(module);

এই কনফিগারেশনগুলোর মাধ্যমে আপনার সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার আরো কার্যকর এবং নিরাপদ করা সম্ভব।

Content added By

জ্যাকসন (Jackson) লাইব্রেরি ব্যবহার করে জাভাতে কমপ্লেক্স অবজেক্টের Serialization এবং Deserialization অত্যন্ত সহজ এবং কার্যকর। এটি JSON (JavaScript Object Notation) ডেটা ফরম্যাট নিয়ে কাজ করার জন্য ব্যবহৃত হয়। জ্যাকসনের মাধ্যমে আমরা জাভার কমপ্লেক্স অবজেক্টগুলোকে JSON-এ রূপান্তর করতে এবং JSON থেকে জাভা অবজেক্ট পুনরুদ্ধার করতে পারি।


1. জ্যাকসনের প্রাথমিক ধারণা

  • Serialization: জাভা অবজেক্টকে JSON স্ট্রিং-এ রূপান্তর করা।
  • Deserialization: JSON স্ট্রিং-কে জাভা অবজেক্টে রূপান্তর করা।

জ্যাকসন লাইব্রেরির প্রধান তিনটি গুরুত্বপূর্ণ ক্লাস:

  1. ObjectMapper: Serialization এবং Deserialization-এর মূল কাজ করে।
  2. JsonNode: Tree Model-এ JSON ডেটা রিপ্রেজেন্ট করতে ব্যবহৃত হয়।
  3. Annotations: জ্যাকসনের অ্যানোটেশন ব্যবহার করে JSON mapping কাস্টমাইজ করা যায়।

2. Complex Object Serialization and Deserialization

কমপ্লেক্স অবজেক্ট বলতে বোঝায় যে অবজেক্টের মধ্যে আরেকটি অবজেক্ট বা Collection রয়েছে। নিচে উদাহরণসহ বিষয়টি ব্যাখ্যা করা হলো।

উদাহরণ: Complex Object Serialization এবং Deserialization

মডেল ক্লাস তৈরি

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

class Address {
    private String street;
    private String city;

    // Constructors, Getters, and Setters
    public Address() {}

    public Address(String street, String city) {
        this.street = street;
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "street='" + street + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

class Employee {
    private String name;
    private int age;
    private List<Address> addresses;

    // Constructors, Getters, and Setters
    public Employee() {}

    public Employee(String name, int age, List<Address> addresses) {
        this.name = name;
        this.age = age;
        this.addresses = addresses;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<Address> getAddresses() {
        return addresses;
    }

    public void setAddresses(List<Address> addresses) {
        this.addresses = addresses;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", addresses=" + addresses +
                '}';
    }
}

Serialization (Object to JSON)

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;

public class JacksonSerializationExample {
    public static void main(String[] args) {
        // Complex Object তৈরি
        Address address1 = new Address("123 Main St", "Dhaka");
        Address address2 = new Address("456 Park Ave", "Chittagong");
        Employee employee = new Employee("John Doe", 30, Arrays.asList(address1, address2));

        try {
            // ObjectMapper instance
            ObjectMapper mapper = new ObjectMapper();

            // Object থেকে JSON String
            String jsonString = mapper.writeValueAsString(employee);
            System.out.println("Serialized JSON:\n" + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

{
  "name": "John Doe",
  "age": 30,
  "addresses": [
    {
      "street": "123 Main St",
      "city": "Dhaka"
    },
    {
      "street": "456 Park Ave",
      "city": "Chittagong"
    }
  ]
}

Deserialization (JSON to Object)

public class JacksonDeserializationExample {
    public static void main(String[] args) {
        String jsonString = """
        {
            "name": "John Doe",
            "age": 30,
            "addresses": [
                {"street": "123 Main St", "city": "Dhaka"},
                {"street": "456 Park Ave", "city": "Chittagong"}
            ]
        }
        """;

        try {
            // ObjectMapper instance
            ObjectMapper mapper = new ObjectMapper();

            // JSON থেকে Object
            Employee employee = mapper.readValue(jsonString, Employee.class);
            System.out.println("Deserialized Object:\n" + employee);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

Deserialized Object:
Employee{name='John Doe', age=30, addresses=[Address{street='123 Main St', city='Dhaka'}, Address{street='456 Park Ave', city='Chittagong'}]}

3. Jackson Annotations

অ্যানোটেশন ব্যবহার করে JSON এবং Object-এর মধ্যকার ম্যাপিং কাস্টমাইজ করা যায়। গুরুত্বপূর্ণ কয়েকটি অ্যানোটেশন:

  • @JsonProperty: JSON ফিল্ড এবং জাভা ফিল্ডের নাম আলাদা হলে ব্যবহৃত হয়।
  • @JsonIgnore: কোনো ফিল্ডকে JSON serialization/deserialization থেকে বাদ দিতে ব্যবহৃত হয়।
  • @JsonInclude: নির্দিষ্ট শর্তে ফিল্ডগুলো JSON-এ যোগ করতে ব্যবহৃত হয়।

উদাহরণ: @JsonProperty ব্যবহার

class Address {
    @JsonProperty("street_name")
    private String street;

    @JsonProperty("city_name")
    private String city;

    // Constructor, Getters, and Setters
}

4. সুবিধা ও পরামর্শ

  • সহজ ব্যবহার: জ্যাকসনের মাধ্যমে কমপ্লেক্স অবজেক্ট নিয়ে কাজ করা খুবই সহজ।
  • স্পষ্টতা: কোড কাস্টমাইজ করা যায়, যা JSON এবং জাভার মধ্যে স্পষ্ট সম্পর্ক তৈরি করে।
  • পারফরম্যান্স: দ্রুত Serialization এবং Deserialization-এর জন্য জ্যাকসন অত্যন্ত কার্যকর।
Content added By
Promotion

Are you sure to start over?

Loading...