@JsonUnwrapped এর ধারণা এবং প্রয়োগ

@JsonUnwrapped এবং Nested Properties - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

335

@JsonUnwrapped Jackson-এর একটি অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় Nested Objects কে "unwrap" (অর্থাৎ, তাদের ফিল্ডগুলোকে মাদার অবজেক্টের মধ্যে সোজা ফ্ল্যাট আকারে) করার জন্য ব্যবহৃত হয়।

এই অ্যানোটেশনটি ব্যবহার করার ফলে, nested অবজেক্টের সকল ফিল্ড মাদার অবজেক্টের ফিল্ড হিসেবে দেখা যাবে এবং এটি JSON অবজেক্টে সরাসরি অন্তর্ভুক্ত হবে।


@JsonUnwrapped এর মূল উদ্দেশ্য

  • Nested Object Flattening: একটি অবজেক্টের ভিতরের অবজেক্টের ফিল্ডগুলোকে মূল অবজেক্টের অংশ হিসেবে flatten করা যায়, যাতে JSON আউটপুটে এগুলো পৃথকভাবে না দেখায়, বরং একত্রে একটি JSON অবজেক্টে পরিণত হয়।
  • Compact JSON Representation: JSON ফাইলটি আরো compact এবং সহজবোধ্য করতে সাহায্য করে, যখন nested অবজেক্টের ফিল্ডগুলো সরাসরি উপরের স্তরের অবজেক্টের অংশ হিসেবে অন্তর্ভুক্ত হয়।

@JsonUnwrapped এর ব্যবহার

১. সাধারণ উদাহরণ

ধরা যাক, আমাদের একটি Address অবজেক্ট এবং একটি Person অবজেক্ট আছে, যেখানে Person এর মধ্যে Address রয়েছে। সাধারণভাবে, যদি @JsonUnwrapped ব্যবহার না করা হয়, তাহলে Address অবজেক্টটি JSON-এ আলাদা অবজেক্ট হিসেবে থাকবে। কিন্তু @JsonUnwrapped ব্যবহার করে আমরা এটি ফ্ল্যাট করে ফেলতে পারি।

কোড উদাহরণ:

import com.fasterxml.jackson.annotation.JsonUnwrapped;

public class Address {
    private String street;
    private String city;

    // Constructors, Getters and Setters
    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;
    }
}

public class Person {
    private String name;
    
    @JsonUnwrapped  // This unwraps the Address fields into the Person object
    private Address address;

    // Constructors, Getters and Setters
    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

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

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUnwrappedExample {
    public static void main(String[] args) throws Exception {
        Address address = new Address("1234 Elm St", "Springfield");
        Person person = new Person("John Doe", address);

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output (Unwrapped):

{
  "name": "John Doe",
  "street": "1234 Elm St",
  "city": "Springfield"
}

ব্যাখ্যা:

  • @JsonUnwrapped এর মাধ্যমে Person অবজেক্টের মধ্যে থাকা Address অবজেক্টের ফিল্ডগুলো সরাসরি JSON আউটপুটে name, street, এবং city হিসেবে যোগ হয়ে যায়।
  • Nested Address অবজেক্টটি এখন Person অবজেক্টের অংশ হিসেবে ফ্ল্যাট হয়ে গেছে, এবং address নামক ফিল্ডটি আর JSON আউটপুটে দেখা যায় না।

@JsonUnwrapped এর আরও কিছু অপশন

২. @JsonUnwrapped এর prefix এবং suffix ব্যবহার

আপনি @JsonUnwrapped এর মাধ্যমে nested অবজেক্টের ফিল্ডগুলোর সাথে prefix এবং suffix যোগ করতে পারেন।

import com.fasterxml.jackson.annotation.JsonUnwrapped;

public class Person {
    private String name;

    @JsonUnwrapped(prefix = "address_")  // Prefix for Address fields
    private Address address;

    // Constructors, Getters and Setters
}

Serialization Example (with prefix):

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUnwrappedPrefixExample {
    public static void main(String[] args) throws Exception {
        Address address = new Address("1234 Elm St", "Springfield");
        Person person = new Person("John Doe", address);

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output (with prefix):

{
  "name": "John Doe",
  "address_street": "1234 Elm St",
  "address_city": "Springfield"
}
  • prefix যুক্ত করার মাধ্যমে address_street এবং address_city হিসেবে JSON ফিল্ডের নাম পরিবর্তিত হয়েছে।

@JsonUnwrapped এর ব্যবহারিক সুবিধা

  1. Compact JSON Structure:
    • Nested অবজেক্টের ফিল্ডগুলো সরাসরি মূল অবজেক্টের সাথে যুক্ত হয়ে JSON স্ট্রাকচারকে আরও compact করে তোলে।
  2. API Response Clarity:
    • বিশেষ করে REST API-তে, nested অবজেক্টের ক্ষেত্রগুলো ফ্ল্যাটভাবে পাওয়া সহজ হয়, যা ক্লায়েন্ট সাইডে প্রক্রিয়া সহজ করে।
  3. Customization:
    • prefix এবং suffix যোগ করার মাধ্যমে আরো কাস্টমাইজড JSON ফরম্যাট তৈরি করা যায়।

@JsonUnwrapped এর সীমাবদ্ধতা

  1. Circular References:
    • Circular references হলে @JsonUnwrapped কাজ নাও করতে পারে। এটি Circular reference সমস্যা সমাধানে পর্যাপ্ত নয়, তাই তখন @JsonManagedReference এবং @JsonBackReference ব্যবহার করা উচিত।
  2. Complex Nested Structures:
    • খুব গভীর nested structures-এ @JsonUnwrapped এর ব্যবহার কিছুটা জটিল হতে পারে এবং JSON এর আউটপুট নন-স্ট্যান্ডার্ড হতে পারে।

  • @JsonUnwrapped হল একটি শক্তিশালী টুল, যা Nested অবজেক্টের ফিল্ডগুলোকে মূল অবজেক্টের অংশ হিসেবে "unwrap" করে JSON Serialization এবং Deserialization প্রক্রিয়া সহজ করে।
  • এটি compact JSON structure তৈরি করতে সাহায্য করে, এবং API response এর স্পষ্টতা বৃদ্ধি করে।
  • prefix এবং suffix ব্যবহার করে JSON আউটপুটকে কাস্টমাইজ করা সম্ভব।
Content added By
Promotion

Are you sure to start over?

Loading...