কম্পিউটার টিউটোরিয়াল

জ্যাকসনে @JsonValue অ্যানোটেশন কখন ব্যবহার করবেন

@JsonValue অ্যানোটেশন মেথড লেভেলে কার্যকর। এটি ব্যবহার করে জাভা অবজেক্ট থেকে JSON স্ট্রিং জেনারেট করা যায়। যদি সিরিয়ালাইজড অবজেক্ট প্রিন্ট করতে চান তবে toString() মেথড ওভাররাইড করতে হয়। কিন্তু @JsonValue অ্যানোটেশন ব্যবহার করে জাভা অবজেক্ট সিরিয়ালাইজ হওয়ার পদ্ধতি ডিফাইন করা যায়।

সিনট্যাক্স

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

উদাহরণ

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class JsonValueAnnotationTest {
    public static void main(String args[]) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(new Student());
        System.out.println(jsonString);
    }
}

// Student class
class Student {
    @JsonProperty
    private int studentId = 115;
    
    @JsonProperty
    private String studentName = "Sai Adithya";
    
    @JsonValue
    public String toJson() {
        return this.studentName + "," + this.studentId + "," + this.toString();
    }
    
    @Override
    public String toString() {
        return "Student[" + 
            "studentId = " + studentId + 
            ", studentName = " + studentName + 
        ']';
    }
}

আউটপুট

"Sai Adithya,115,Student[studentId = 115, studentName = Sai Adithya]"

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

  • কাস্টম স্ট্রিং রিপ্রেজেন্টেশন জেনারেট করতে চাইলে
  • এনাম বা ভ্যালু অবজেক্টকে সিম্পল JSON ভ্যালু (স্ট্রিং/নাম্বার) হিসেবে সিরিয়ালাইজ করতে
  • toString()-এর পরিবর্তে JSON-স্পেসিফিক ফরম্যাট দরকার হলে

নোট

@JsonValue অ্যানোটেট করা মেথড অবশ্যই নন-স্ট্যাটিক এবং নন-ভয়ড রিটার্ন টাইপের হতে হবে। একটি ক্লাসে শুধু একটি @JsonValue মেথড থাকতে পারে।

  1. জাভাতে pack() মেথড কখন ব্যবহার করবেন

  2. জাভাতে সিঙ্ক্রোনাইজড ব্লক কখন ব্যবহার করা উচিত?

  3. জাভাতে fillInStackTrace() মেথড কখন ব্যবহার করব

  4. জাভাতে কখন অ্যাবস্ট্রাক্ট ক্লাস এবং কখন ইন্টারফেস ব্যবহার করবেন?