Getter এবং Setter মেথডের মাধ্যমে JSON property mapping করা

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

325

Jackson JSON ডেটা এবং Java Objects এর মধ্যে Serialization (Java Object → JSON) এবং Deserialization (JSON → Java Object) করার সময় Getter এবং Setter মেথড ব্যবহার করে ফিল্ডগুলোর সাথে JSON properties-এর ম্যাপিং তৈরি করে। Jackson Annotations এর মাধ্যমে এই ম্যাপিং কাস্টমাইজ করা সম্ভব।


Getter এবং Setter মেথডের ডিফল্ট ব্যবহারে JSON Property Mapping

Jackson ডিফল্টভাবে Java Bean স্টাইল ফলো করে, যেখানে ফিল্ডের নাম অনুসারে Getter এবং Setter মেথড তৈরি করা হয়।

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;

class User {
    private String name;
    private int age;

    // Default Constructor (Required for Deserialization)
    public User() {}

    // Getter and Setter
    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 class DefaultMappingExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Serialization
        User user = new User();
        user.setName("Alice");
        user.setAge(25);
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);

        // Deserialization
        String inputJson = "{\"name\":\"Bob\",\"age\":30}";
        User deserializedUser = mapper.readValue(inputJson, User.class);
        System.out.println("Deserialized User: " + deserializedUser.getName() + ", Age: " + deserializedUser.getAge());
    }
}

Getter এবং Setter কাস্টমাইজেশন Jackson Annotations এর মাধ্যমে

১. @JsonProperty ব্যবহার

@JsonProperty দিয়ে Getter এবং Setter মেথডের মাধ্যমে JSON ফিল্ডের কাস্টম নাম নির্ধারণ করা হয়।

উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;

class User {
    private String name;
    private int age;

    @JsonProperty("user_name")
    public String getName() {
        return name;
    }

    @JsonProperty("user_name")
    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("user_age")
    public int getAge() {
        return age;
    }

    @JsonProperty("user_age")
    public void setAge(int age) {
        this.age = age;
    }
}
Serialized Output:
{
  "user_name": "Alice",
  "user_age": 25
}

২. Getter বা Setter বাদ দেওয়া

@JsonIgnore দিয়ে নির্দিষ্ট Getter বা Setter JSON সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ থেকে বাদ দেওয়া যায়।

উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnore;

class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    @JsonIgnore
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Serialized Output:
{
  "name": "Alice"
}

৩. Conditional Inclusion (@JsonInclude)

@JsonInclude দিয়ে নির্দিষ্ট শর্তে Getter বা Setter JSON-এ অন্তর্ভুক্ত করা হয়।

উদাহরণ:
import com.fasterxml.jackson.annotation.JsonInclude;

class User {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

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

    @JsonInclude(JsonInclude.Include.NON_NULL)
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
Serialized Output (email null হলে):
{
  "name": "Alice"
}

৪. Dynamic Naming (@JsonGetter এবং @JsonSetter)

@JsonGetter এবং @JsonSetter দিয়ে Getter এবং Setter মেথডের জন্য JSON property-এর নাম নির্ধারণ করা যায়।

উদাহরণ:
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

class User {
    private String name;

    @JsonGetter("user_name")
    public String getName() {
        return name;
    }

    @JsonSetter("user_name")
    public void setName(String name) {
        this.name = name;
    }
}
Serialized Output:
{
  "user_name": "Alice"
}

৫. Non-Standard Naming Strategy

কোনো Getter বা Setter-এর নাম ডিফল্ট convention অনুসরণ না করলে, @JsonProperty ব্যবহার করতে হবে।

উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;

class User {
    private String fullName;

    @JsonProperty("full_name")
    public String fetchFullName() {
        return fullName;
    }

    @JsonProperty("full_name")
    public void updateFullName(String fullName) {
        this.fullName = fullName;
    }
}
Serialized Output:
{
  "full_name": "Alice"
}

Custom Field Naming Using PropertyNamingStrategy

Jackson-এ গ্লোবালভাবে ফিল্ডের নামকরণ নিয়ম পরিবর্তন করতে PropertyNamingStrategy ব্যবহার করা যায়।

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;

class User {
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

public class NamingStrategyExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

        User user = new User();
        user.setFirstName("Alice");
        user.setLastName("Doe");

        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);
    }
}
Serialized Output:
{
  "first_name": "Alice",
  "last_name": "Doe"
}

সারাংশ

অ্যানোটেশনব্যবহার
@JsonPropertyJSON property-এর নাম কাস্টমাইজ করা।
@JsonIgnoreনির্দিষ্ট Getter বা Setter JSON থেকে বাদ দেওয়া।
@JsonIncludeনির্দিষ্ট শর্তে JSON property অন্তর্ভুক্ত করা।
@JsonGetterGetter মেথডের জন্য JSON property নাম নির্ধারণ।
@JsonSetterSetter মেথডের জন্য JSON property নাম নির্ধারণ।
PropertyNamingStrategyগ্লোবাল ফিল্ড নামকরণ স্ট্র্যাটেজি (যেমন, snake_case, kebab-case) প্রয়োগ।

  1. Getter এবং Setter মেথড ব্যবহার করে JSON properties সহজেই ম্যাপ করা যায়।
  2. @JsonProperty, @JsonIgnore, এবং @JsonInclude এর মাধ্যমে সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন নিয়ন্ত্রণ করা যায়।
  3. গ্লোবাল বা বড় প্রজেক্টের ক্ষেত্রে PropertyNamingStrategy কার্যকর।
  4. কাস্টম JSON ফিল্ড নিয়ন্ত্রণের জন্য Jackson Annotations ব্যবহার করা প্রয়োজনীয় এবং কার্যকর।
Content added By
Promotion

Are you sure to start over?

Loading...