@JsonGetter এবং @JsonSetter গাইড ও নোট

Java Technologies - জ্যাকসন অ্যানোটেশন (Jackson Annotations)
277

@JsonGetter এবং @JsonSetter হল Jackson-এর Annotation, যা JSON Serialization এবং Deserialization-এর সময় নির্দিষ্ট মেথডকে নিয়ন্ত্রণ করতে ব্যবহার করা হয়। এটি গেটার (getter) এবং সেটার (setter) মেথডগুলোর মাধ্যমে JSON ফিল্ড কাস্টমাইজ করতে সাহায্য করে।


@JsonGetter

  • @JsonGetter ব্যবহার করে JSON Serialization-এর সময় নির্দিষ্ট একটি গেটার মেথডের আউটপুট JSON ফিল্ডে প্রতিফলিত হয়।
  • এটি JSON ফিল্ডের নাম কাস্টমাইজ করতেও সাহায্য করে।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonGetter;

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

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

    @JsonGetter("user_id")
    public int getId() {
        return id;
    }

    @JsonGetter("user_name")
    public String getName() {
        return name;
    }
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterExample {
    public static void main(String[] args) throws Exception {
        User user = new User(1, "Rahim");

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

        System.out.println(json);
    }
}
JSON Output:
{
  "user_id": 1,
  "user_name": "Rahim"
}

@JsonSetter

  • @JsonSetter ব্যবহার করে JSON Deserialization-এর সময় একটি নির্দিষ্ট সেটার মেথড নির্ধারণ করা হয়।
  • এটি JSON ফিল্ডের নাম এবং Java ফিল্ডের নাম ভিন্ন হলে সমস্যার সমাধান করে।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonSetter;

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

    public int getId() {
        return id;
    }

    @JsonSetter("user_id")
    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @JsonSetter("user_name")
    public void setName(String name) {
        this.name = name;
    }
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonSetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"user_id\":1,\"user_name\":\"Rahim\"}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
    }
}
Output:
ID: 1
Name: Rahim

@JsonGetter এবং @JsonSetter একত্রে ব্যবহার

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

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

    @JsonGetter("user_id")
    public int getId() {
        return id;
    }

    @JsonSetter("user_id")
    public void setId(int id) {
        this.id = id;
    }

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

    @JsonSetter("user_name")
    public void setName(String name) {
        this.name = name;
    }
}
Serialization এবং Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterSetterExample {
    public static void main(String[] args) throws Exception {
        // Serialization
        User user = new User();
        user.setId(1);
        user.setName("Rahim");

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);

        // Deserialization
        String inputJson = "{\"user_id\":2,\"user_name\":\"Karim\"}";
        User deserializedUser = mapper.readValue(inputJson, User.class);
        System.out.println("Deserialized User ID: " + deserializedUser.getId());
        System.out.println("Deserialized User Name: " + deserializedUser.getName());
    }
}
Output:
Serialized JSON: {"user_id":1,"user_name":"Rahim"}
Deserialized User ID: 2
Deserialized User Name: Karim

কেন @JsonGetter এবং @JsonSetter ব্যবহার করবেন?

  1. JSON এবং Java ফিল্ডের নাম ভিন্ন হলে:
    • JSON ফিল্ডের নাম এবং Java ফিল্ডের নাম ভিন্ন হলে Mapping ঠিক রাখতে।
  2. Custom Logic প্রয়োগ করতে:
    • Getter বা Setter মেথডে কাস্টম লজিক প্রয়োগ করার জন্য।
  3. API Contract নির্ধারণ:
    • API-এর JSON ফরম্যাট নির্দিষ্ট করার জন্য।
  4. Backward Compatibility:
    • ফিল্ডের নাম পরিবর্তন হলেও পুরোনো JSON ফরম্যাট সমর্থন করার জন্য।

@JsonGetter বনাম @JsonProperty

বৈশিষ্ট্য@JsonGetter@JsonProperty
ফোকাসনির্দিষ্ট Getter মেথডে প্রয়োগ করা হয়ফিল্ডের উপর সরাসরি প্রয়োগ করা হয়
ব্যবহারশুধুমাত্র Serialization-এর জন্যSerialization এবং Deserialization উভয়ের জন্য
CustomizationGetter মেথডের মাধ্যমে JSON ফিল্ড নিয়ন্ত্রণফিল্ডের নাম নির্ধারণ এবং আরও কাস্টমাইজেশনের জন্য

  • @JsonGetter এবং @JsonSetter নির্দিষ্ট Getter এবং Setter মেথডে JSON ফিল্ডের কাস্টম নাম নির্ধারণ করতে ব্যবহৃত হয়।
  • এটি JSON Serialization এবং Deserialization প্রক্রিয়াকে আরও নির্ভুল এবং কাস্টমাইজড করে।
  • যদি JSON ফরম্যাট পরিবর্তনের প্রয়োজন হয়, তাহলে এই অ্যানোটেশন ব্যবহার করে কোডে উল্লেখযোগ্য পরিবর্তন ছাড়াই তা সম্ভব।
Content added By

@JsonGetter এবং @JsonSetter এর ধারণা

278

@JsonGetter এবং @JsonSetter হল Jackson Annotations, যা JSON serialization এবং deserialization এর সময় Java মেথডগুলিকে নির্দিষ্টভাবে JSON ফিল্ডের সাথে ম্যাপ করার সুযোগ দেয়। এগুলি মূলত গেটার (getter) এবং সেটার (setter) মেথডের সাথে কাজ করে।


@JsonGetter এর ধারণা

@JsonGetter একটি গেটার মেথডকে JSON serialization এর সময় নির্দিষ্ট ফিল্ডের জন্য দায়ী করে। এটি @JsonProperty এর মতো কাজ করে, তবে শুধুমাত্র গেটার মেথডের জন্য প্রযোজ্য।

ব্যবহার

  1. JSON serialization এর সময় ফিল্ডের নাম কাস্টমাইজ করা।
  2. নির্দিষ্ট গেটার মেথডকে JSON ফিল্ডের জন্য ব্যবহার করা।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonGetter;

public class Person {
    private String firstName;
    private String lastName;

    // Constructor
    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @JsonGetter("full_name") // Map this getter to JSON field "full_name"
    public String getFullName() {
        return firstName + " " + lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
Serialization Example
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        Person person = new Person("John", "Doe");

        // Serialize to JSON
        String json = mapper.writeValueAsString(person);
        System.out.println(json); // Output: {"full_name":"John Doe","firstName":"John","lastName":"Doe"}
    }
}

@JsonSetter এর ধারণা

@JsonSetter একটি সেটার মেথডকে JSON deserialization এর সময় নির্দিষ্ট ফিল্ডের জন্য দায়ী করে। এটি JSON ডেটা থেকে Java ফিল্ড সেট করার জন্য ব্যবহৃত হয়।

ব্যবহার

  1. JSON deserialization এর সময় ফিল্ডের নাম কাস্টমাইজ করা।
  2. নির্দিষ্ট সেটার মেথডকে JSON ফিল্ডের জন্য ব্যবহার করা।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonSetter;

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

    // Constructor
    public Person() {}

    public String getName() {
        return name;
    }

    @JsonSetter("full_name") // Map this setter to JSON field "full_name"
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Deserialization Example
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonSetterExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        String json = "{\"full_name\":\"Jane Doe\",\"age\":25}";

        // Deserialize JSON to Java Object
        Person person = mapper.readValue(json, Person.class);

        System.out.println(person.getName()); // Output: Jane Doe
        System.out.println(person.getAge());  // Output: 25
    }
}

@JsonGetter এবং @JsonSetter একত্রে ব্যবহার

কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class Employee {
    private String employeeName;
    private double salary;

    @JsonGetter("employee_name") // Serialize as "employee_name"
    public String getEmployeeName() {
        return employeeName;
    }

    @JsonSetter("employee_name") // Deserialize from "employee_name"
    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    @JsonGetter("monthly_salary") // Serialize as "monthly_salary"
    public double getSalary() {
        return salary;
    }

    @JsonSetter("monthly_salary") // Deserialize from "monthly_salary"
    public void setSalary(double salary) {
        this.salary = salary;
    }
}
Serialization এবং Deserialization Example
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterSetterExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Serialize
        Employee employee = new Employee();
        employee.setEmployeeName("Alice");
        employee.setSalary(5000.0);
        String json = mapper.writeValueAsString(employee);
        System.out.println(json); // Output: {"employee_name":"Alice","monthly_salary":5000.0}

        // Deserialize
        String jsonInput = "{\"employee_name\":\"Bob\",\"monthly_salary\":4500.0}";
        Employee deserializedEmployee = mapper.readValue(jsonInput, Employee.class);

        System.out.println(deserializedEmployee.getEmployeeName()); // Output: Bob
        System.out.println(deserializedEmployee.getSalary());       // Output: 4500.0
    }
}

@JsonGetter এবং @JsonSetter এর সুবিধা

  1. Custom Naming:
    • JSON serialization/deserialization এর সময় ফিল্ডের কাস্টম নাম ব্যবহার করতে দেয়।
  2. Backward Compatibility:
    • পুরোনো কোডের সাথে JSON ফরম্যাট সামঞ্জস্য রাখতে সহায়তা করে।
  3. Selective Control:
    • নির্দিষ্ট মেথডের মাধ্যমে serialization এবং deserialization পরিচালনা করা যায়।
  4. Readability:
    • JSON ফিল্ডের সাথে সম্পর্ক সহজে বোঝা যায়।

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

  1. REST API Development:
    • JSON ডেটা কাস্টমাইজড ফিল্ড নামে প্রক্রিয়া করতে।
  2. Data Processing:
    • JSON থেকে Java অবজেক্ট এবং Java অবজেক্ট থেকে JSON তৈরি করতে।
  3. Complex Data Models:
    • যেখানে কাস্টম serialization/deserialization প্রয়োজন।

@JsonGetter এবং @JsonSetter অ্যানোটেশনগুলি Jackson-এর মাধ্যমে JSON serialization এবং deserialization আরও কাস্টমাইজড এবং নিয়ন্ত্রিত করতে সাহায্য করে।

  • @JsonGetter: JSON ফিল্ড তৈরির জন্য নির্দিষ্ট গেটার মেথড ব্যবহার করে।
  • @JsonSetter: JSON ডেটা থেকে ফিল্ড সেট করার জন্য নির্দিষ্ট সেটার মেথড ব্যবহার করে।

এই অ্যানোটেশনগুলি REST API এবং JSON প্রক্রিয়াকরণের ক্ষেত্রে খুবই কার্যকর।

Content added By

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

305

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

Custom Getter এবং Setter Methods ব্যবহার করা

287

Jackson-এ JSON serialization এবং deserialization-এর সময় কাস্টম Getter এবং Setter মেথড ব্যবহার করার জন্য নির্দিষ্ট অ্যানোটেশন রয়েছে। এগুলো দিয়ে JSON এবং Java Object-এর মধ্যে কাস্টম ম্যাপিং তৈরি করা যায়।


1. Custom Getter Methods

1.1 @JsonGetter

  • @JsonGetter একটি নির্দিষ্ট মেথডকে JSON প্রপার্টি হিসেবে Serialize করার জন্য ব্যবহার করা হয়।
  • এটি ডিফল্ট Getter মেথডের (যেমন, getName) বিকল্প হিসেবে কাজ করে।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonGetter;

public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

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

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

Serialization:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User("Alice");

        // Serialize
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);
    }
}

JSON আউটপুট:

{
  "user_name": "Alice"
}

2. Custom Setter Methods

2.1 @JsonSetter

  • @JsonSetter একটি নির্দিষ্ট মেথডকে JSON প্রপার্টি হিসেবে Deserialize করার জন্য ব্যবহার করা হয়।
  • এটি ডিফল্ট Setter মেথডের (যেমন, setName) বিকল্প হিসেবে কাজ করে।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonSetter;

public class User {
    private String name;

    public String getName() {
        return name;
    }

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

Deserialization:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonSetterExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        String json = "{\"user_name\":\"Alice\"}";

        // Deserialize
        User user = mapper.readValue(json, User.class);
        System.out.println("Deserialized User Name: " + user.getName());
    }
}

JSON ইনপুট:

{
  "user_name": "Alice"
}

আউটপুট:

Deserialized User Name: Alice

3. Combined Usage: @JsonGetter এবং @JsonSetter

Getter এবং Setter মেথডে আলাদা JSON প্রপার্টি নাম ব্যবহার করা যেতে পারে।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class User {
    private String name;

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

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

Serialization এবং Deserialization:

import com.fasterxml.jackson.databind.ObjectMapper;

public class CombinedExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Deserialize
        String json = "{\"user_name\":\"Alice\"}";
        User user = mapper.readValue(json, User.class);
        System.out.println("Deserialized User Name: " + user.getName());

        // Serialize
        String serializedJson = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

JSON ইনপুট:

{
  "user_name": "Alice"
}

JSON আউটপুট:

{
  "user_name": "Alice"
}

4. Custom Logic in Getter and Setter

Getter এবং Setter মেথডে কাস্টম লজিক যোগ করা যেতে পারে।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class User {
    private String name;

    @JsonGetter("user_name")
    public String getFormattedName() {
        return "User: " + name;
    }

    @JsonSetter("user_name")
    public void setNameFromJson(String name) {
        this.name = name.trim();
    }
}

Serialization এবং Deserialization:

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomLogicExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Deserialize
        String json = "{\"user_name\":\"  Alice  \"}";
        User user = mapper.readValue(json, User.class);
        System.out.println("Deserialized User Name: " + user.getFormattedName());

        // Serialize
        String serializedJson = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

JSON ইনপুট:

{
  "user_name": "  Alice  "
}

JSON আউটপুট:

{
  "user_name": "User: Alice"
}

5. @JsonProperty Alternative

@JsonGetter এবং @JsonSetter না ব্যবহার করে @JsonProperty দিয়ে Getter এবং Setter মেথডে একই প্রপার্টি নিয়ন্ত্রণ করা যায়।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    private String name;

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

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

6. Best Practices

  1. Consistency in Naming:
    • @JsonGetter এবং @JsonSetter ব্যবহার করলে প্রপার্টি নাম কনসিসটেন্ট রাখুন।
  2. Use @JsonProperty for Simplicity:
    • ছোট এবং সোজা কনফিগারেশনের জন্য @JsonProperty ব্যবহার করুন।
  3. Custom Logic in Methods:
    • কাস্টম লজিক যোগ করার জন্য Getter এবং Setter মেথডে কাস্টমাইজেশন যোগ করুন।
  4. Readable JSON Design:
    • JSON প্রপার্টি নাম সহজ এবং বোধগম্য রাখুন।

Jackson-এর @JsonGetter এবং @JsonSetter ব্যবহার করে কাস্টম Getter এবং Setter মেথড তৈরি করা যায়। এটি JSON প্রপার্টি এবং Java ফিল্ডের মধ্যে কাস্টম ম্যাপিং করতে অত্যন্ত কার্যকর। Industry Standards অনুযায়ী সঠিক অ্যানোটেশন এবং লজিক ব্যবহার করলে কোড আরও মেনটেইনেবল এবং কার্যকর হবে।

Content added By

Practical উদাহরণ সহ @JsonGetter এবং @JsonSetter এর ব্যবহার

275

@JsonGetter এবং @JsonSetter Jackson Annotations, যা JSON ডেটা এবং Java Object এর মধ্যে সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের সময় ব্যবহৃত হয়। এগুলো বিশেষত তখন ব্যবহৃত হয় যখন আপনি JSON ফিল্ড এবং Java মেথডের নাম ভিন্ন রাখতে চান।


@JsonGetter

@JsonGetter:

  • এটি সিরিয়ালাইজেশনের সময় ব্যবহার করা হয়।
  • এটি নির্দেশ করে যে কোন মেথডটি JSON প্রপার্টি হিসেবে ব্যবহৃত হবে।

@JsonSetter

@JsonSetter:

  • এটি ডেসিরিয়ালাইজেশনের সময় ব্যবহার করা হয়।
  • এটি নির্দেশ করে যে কোন মেথডটি JSON থেকে মান সেট করার জন্য ব্যবহৃত হবে।

Practical উদাহরণ

১. @JsonGetter এবং @JsonSetter এর মৌলিক ব্যবহার

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

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

    @JsonGetter("user_id")
    public int getId() {
        return id;
    }

    @JsonSetter("user_id")
    public void setId(int id) {
        this.id = id;
    }

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

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

JSON Input:

{
    "user_id": 1,
    "user_name": "John Doe"
}

Usage Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonGetterSetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{ \"user_id\": 1, \"user_name\": \"John Doe\" }";

        ObjectMapper objectMapper = new ObjectMapper();

        // JSON থেকে Object এ রূপান্তর
        User user = objectMapper.readValue(json, User.class);
        System.out.println("User Name: " + user.getName());

        // Object থেকে JSON এ রূপান্তর
        String serializedJson = objectMapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

আউটপুট:

User Name: John Doe
Serialized JSON: {"user_id":1,"user_name":"John Doe"}

২. Getter এবং Setter এর কাস্টম নাম ব্যবহার

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class Product {
    private int productId;
    private String productName;

    @JsonGetter("id")
    public int getProductId() {
        return productId;
    }

    @JsonSetter("id")
    public void setProductId(int productId) {
        this.productId = productId;
    }

    @JsonGetter("name")
    public String getProductName() {
        return productName;
    }

    @JsonSetter("name")
    public void setProductName(String productName) {
        this.productName = productName;
    }
}

JSON Input:

{
    "id": 101,
    "name": "Laptop"
}

JSON Output:

{
    "id": 101,
    "name": "Laptop"
}

৩. @JsonGetter এবং @JsonSetter ডায়নামিক ফিল্ড নামের জন্য ব্যবহার

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

import java.util.HashMap;
import java.util.Map;

public class DynamicUser {
    private Map<String, Object> properties = new HashMap<>();

    @JsonGetter("properties")
    public Map<String, Object> getProperties() {
        return properties;
    }

    @JsonSetter("properties")
    public void setProperties(Map<String, Object> properties) {
        this.properties = properties;
    }
}

JSON Input:

{
    "properties": {
        "age": 30,
        "location": "Dhaka"
    }
}

Usage Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class DynamicUserExample {
    public static void main(String[] args) throws Exception {
        String json = "{ \"properties\": { \"age\": 30, \"location\": \"Dhaka\" } }";

        ObjectMapper objectMapper = new ObjectMapper();

        // JSON থেকে Object
        DynamicUser user = objectMapper.readValue(json, DynamicUser.class);
        System.out.println("User Properties: " + user.getProperties());

        // Object থেকে JSON
        String serializedJson = objectMapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

আউটপুট:

User Properties: {age=30, location=Dhaka}
Serialized JSON: {"properties":{"age":30,"location":"Dhaka"}}

৪. @JsonGetter এবং @JsonSetter এর সাথে ভিন্ন ভিন্ন ফিল্ড নাম ব্যবহার

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;

public class Employee {
    private int empId;
    private String empName;

    @JsonGetter("employee_id")
    public int getEmpId() {
        return empId;
    }

    @JsonSetter("id")
    public void setEmpId(int empId) {
        this.empId = empId;
    }

    @JsonGetter("employee_name")
    public String getEmpName() {
        return empName;
    }

    @JsonSetter("name")
    public void setEmpName(String empName) {
        this.empName = empName;
    }
}

JSON Input:

{
    "id": 2001,
    "name": "Alice"
}

JSON Output:

{
    "employee_id": 2001,
    "employee_name": "Alice"
}

  1. @JsonGetter সিরিয়ালাইজেশনের সময় ফিল্ডের নাম কাস্টমাইজ করতে ব্যবহৃত হয়।
  2. @JsonSetter ডেসিরিয়ালাইজেশনের সময় JSON ফিল্ডের নাম এবং Java ফিল্ডের মধ্যে ম্যাপিং তৈরি করতে ব্যবহৃত হয়।
  3. এগুলো REST API এবং ডেটা এক্সচেঞ্জের সময় নমনীয়তা ও কার্যকারিতা বাড়ায়।
  4. ডায়নামিক ফিল্ড বা কাস্টম নাম ব্যবহারের ক্ষেত্রে @JsonGetter এবং @JsonSetter অত্যন্ত কার্যকর।

উপযুক্ত ব্যবহার ক্ষেত্র: কাস্টম নামের JSON ফিল্ড হ্যান্ডলিং, ডায়নামিক ডেটা প্রসেসিং, এবং API রেসপন্স কাস্টমাইজেশন।

Content added By
Promotion

Are you sure to start over?

Loading...