@JsonIgnoreProperties এবং Ignore Unknown Properties গাইড ও নোট

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

Jackson-এর @JsonIgnoreProperties অ্যানোটেশন এবং Ignore Unknown Properties ফিচার JSON ডেটা প্রসেস করার সময় অপ্রয়োজনীয় বা অজানা প্রোপার্টি বা ফিল্ডগুলি উপেক্ষা করতে ব্যবহৃত হয়। এটি খুবই উপকারী যখন আপনি JSON এর মধ্যে এমন ফিল্ড দেখতে পান যা আপনার Java ক্লাসে উপস্থিত নেই, অথবা আপনি JSON-এ অতিরিক্ত ফিল্ড এড়িয়ে যেতে চান।


@JsonIgnoreProperties Annotation

@JsonIgnoreProperties Jackson এর একটি অ্যানোটেশন যা একটি Java ক্লাসের উপর প্রয়োগ করা হয়। এটি আপনাকে JSON ফিল্ড বা প্রোপার্টিগুলি উপেক্ষা করার সুযোগ দেয় যখন Deserialization বা Serialization হয়।

ব্যবহার:

  1. নির্দিষ্ট ফিল্ড উপেক্ষা করা:
    • @JsonIgnoreProperties ব্যবহার করে আপনি একটি ক্লাসের নির্দিষ্ট ফিল্ড উপেক্ষা করতে পারেন।
  2. এমন ফিল্ড উপেক্ষা করা যা Java ক্লাসে নেই:
    • আপনি @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করে অজানা JSON প্রোপার্টি উপেক্ষা করতে পারেন।

@JsonIgnoreProperties এর ব্যবহার উদাহরণ

১. নির্দিষ্ট ফিল্ড উপেক্ষা করা

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties({"email"})
public class User {
    private int id;
    private String name;
    private String email;

    // Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        User user = new User();
        user.setId(1);
        user.setName("Rahim");
        user.setEmail("rahim@example.com");

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

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

এখানে, email ফিল্ডটি Serialization এর সময় JSON আউটপুটে প্রদর্শিত হয়নি, কারণ আমরা @JsonIgnoreProperties({"email"}) ব্যবহার করেছি।


২. অজানা প্রোপার্টি উপেক্ষা করা

যখন আপনার JSON ডেটাতে এমন ফিল্ড থাকে যা Java ক্লাসে নেই, তখন আপনি @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করে সেই অজানা ফিল্ডগুলি উপেক্ষা করতে পারেন।

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // Getters and Setters
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class IgnoreUnknownPropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"email\":\"rahim@example.com\"}";

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

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

Output:

User ID: 1
User Name: Rahim

এখানে, email ফিল্ড JSON থেকে Java ক্লাসে User-এ যোগ হয়নি, কারণ আমরা @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করেছি। ফলে "email" ফিল্ডটি উপেক্ষা করা হয়েছে।


Global Setting for Ignoring Unknown Properties

Jackson-এর ObjectMapper ব্যবহার করে গ্লোবালি ignoreUnknown = true সেট করা যায় যাতে সমস্ত অজানা প্রোপার্টি উপেক্ষা করা হয়।

এটি সেট করার উদাহরণ:

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

public class GlobalIgnoreUnknownPropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"email\":\"rahim@example.com\"}";

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

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

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

Output:

User ID: 1
User Name: Rahim

এখানে, FAIL_ON_UNKNOWN_PROPERTIES সেটিংটি false করে দেওয়া হয়েছে, যার ফলে Jackson JSON ডেটা থেকে অজানা প্রোপার্টি (যেমন: email) উপেক্ষা করেছে।


@JsonIgnoreProperties এর সুবিধা

  1. Backward Compatibility:
    • যখন JSON ফরম্যাটে নতুন ফিল্ড যুক্ত হয়, তখন পুরোনো ফিল্ডের সঙ্গে সামঞ্জস্য রাখার জন্য উপকারী।
  2. Efficient Deserialization:
    • অজানা প্রোপার্টি উপেক্ষা করে শুধুমাত্র প্রয়োজনীয় ডেটা প্রসেস করতে সাহায্য করে, ফলে কর্মক্ষমতা বৃদ্ধি পায়।
  3. Simplified Code:
    • অতিরিক্ত বা অপ্রয়োজনীয় ফিল্ডের জন্য কোডে জটিলতা না বাড়িয়ে সরাসরি উপেক্ষা করতে সক্ষম হয়।

@JsonIgnoreProperties vs @JsonIgnore

বৈশিষ্ট্য@JsonIgnoreProperties@JsonIgnore
ব্যবহারএকাধিক ফিল্ড বা অজানা প্রোপার্টি উপেক্ষা করতে ব্যবহৃতএকটি একক ফিল্ড বা প্রোপার্টি উপেক্ষা করতে ব্যবহৃত
প্রয়োগক্লাসের উপর, বিশেষ করে অজানা প্রোপার্টি উপেক্ষা করতেনির্দিষ্ট ফিল্ড বা মেথডের উপর
Global Setting@JsonIgnoreProperties(ignoreUnknown = true) দিয়ে globalভাবে ব্যবহৃত হতে পারেশুধুমাত্র নির্দিষ্ট ফিল্ডের জন্য ব্যবহৃত হয়

  1. @JsonIgnoreProperties ব্যবহার করে আপনি JSON থেকে অপ্রয়োজনীয় বা অজানা প্রোপার্টি উপেক্ষা করতে পারেন।
  2. এটি বিশেষভাবে দরকারি যখন JSON ফরম্যাট পরিবর্তন হয় বা ফিল্ডের নাম পরিবর্তিত হয়, তখন আপনি পুরোনো বা নতুন JSON ফরম্যাটের মধ্যে সামঞ্জস্য রাখতে পারবেন।
  3. @JsonIgnoreProperties(ignoreUnknown = true) এর মাধ্যমে গ্লোবালি অজানা প্রোপার্টি উপেক্ষা করার সুবিধা পাওয়া যায়।
  4. @JsonIgnore ব্যবহার করে আপনি শুধুমাত্র একক ফিল্ডকে JSON-এ উপেক্ষা করতে পারেন।
Content added By

Unknown properties handle করা

219

Jackson-এ Unknown Properties Handling একটি গুরুত্বপূর্ণ বিষয়, বিশেষত যখন JSON ডেটা অপ্রত্যাশিত বা অজানা ফিল্ড সম্বলিত থাকে। যদি Jackson JSON ডেটা থেকে অজানা ফিল্ডগুলোকে অগ্রাহ্য না করে, তবে UnrecognizedPropertyException ঘটতে পারে।

Jackson এ JSON ডেটার সাথে সামঞ্জস্য রাখতে এবং অজানা প্রোপার্টি সমাধান করতে কয়েকটি অ্যানোটেশন এবং কনফিগারেশন রয়েছে। নিচে @JsonIgnoreProperties এবং @JsonAnySetter অ্যানোটেশন ব্যবহার করে কীভাবে অজানা প্রোপার্টি হ্যান্ডল করা যায় তা বিস্তারিত আলোচনা করা হলো।


1. @JsonIgnoreProperties Annotation

@JsonIgnoreProperties অ্যানোটেশন ব্যবহার করা হয়, যখন JSON ডেটার মধ্যে অজানা প্রোপার্টি থাকে এবং আপনি সেগুলোকে JSON Serialization/Deserialization-এ অগ্রাহ্য করতে চান।

ব্যবহার:

  • ignoreUnknown = true: Jackson অজানা প্রোপার্টিগুলো উপেক্ষা করবে।

Java Class Example:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // 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;
    }
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";

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

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

Output:

User ID: 1
User Name: Rahim

এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করবে কারণ @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করা হয়েছে।


2. @JsonAnySetter Annotation

@JsonAnySetter অ্যানোটেশন ব্যবহার করা হয়, যখন আপনি JSON ডেটার অজানা ফিল্ডগুলোকে একটি Map এ সেট করতে চান। এটি খুবই উপকারী যখন JSON ডেটাতে অতিরিক্ত প্রোপার্টি থাকতে পারে, এবং আপনি সেগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচারে সংরক্ষণ করতে চান।

ব্যবহার:

  • JSON ডেটার অজানা ফিল্ডগুলো একটি Map<String, Object> এ সেট করা হয়।

Java Class Example:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;

public class User {
    private int id;
    private String name;
    
    private Map<String, Object> otherProperties = new HashMap<>();

    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;
    }

    @JsonAnySetter
    public void setOtherProperties(String key, Object value) {
        this.otherProperties.put(key, value);
    }

    public Map<String, Object> getOtherProperties() {
        return otherProperties;
    }
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAnySetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\", \"address\":\"123 Street\"}";

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

        System.out.println("User ID: " + user.getId());
        System.out.println("User Name: " + user.getName());
        System.out.println("Other Properties: " + user.getOtherProperties());
    }
}

Output:

User ID: 1
User Name: Rahim
Other Properties: {email=rahim@example.com, address=123 Street}

এখানে, email এবং address প্রোপার্টি User ক্লাসে নেই, তবে এগুলো otherProperties মেপে সংরক্ষণ করা হয়েছে।


3. ObjectMapper Configuration

Jackson ObjectMapper-এ FAIL_ON_UNKNOWN_PROPERTIES কনফিগারেশন সেট করে আপনি অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।

Java Class Example:

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

public class ObjectMapperIgnoreUnknown {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"Rahim\", \"email\":\"rahim@example.com\"}";

        ObjectMapper mapper = new ObjectMapper();
        // Configure ObjectMapper to ignore unknown properties
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

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

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

Output:

User ID: 1
User Name: Rahim

এখানে, email ফিল্ডটি User ক্লাসে উপস্থিত না হলেও Jackson সেটি উপেক্ষা করে এবং কোডটি সঠিকভাবে কাজ করে।


@JsonIgnoreProperties এবং @JsonAnySetter এর মধ্যে পার্থক্য

বৈশিষ্ট্য@JsonIgnoreProperties@JsonAnySetter
ফোকাসঅজানা প্রোপার্টি গুলি উপেক্ষা করাঅজানা প্রোপার্টি গুলি একটি Map এ সেট করা
ব্যবহারসমস্ত অজানা প্রোপার্টি উপেক্ষা করতেJSON এর অজানা প্রোপার্টি একটি ডাইনামিক স্ট্রাকচারে সংরক্ষণ করা
ক্যাপচারশুধুমাত্র অজানা প্রোপার্টি উপেক্ষা করা হয়অজানা প্রোপার্টি Map বা List-এ ক্যাপচার করা হয়

  1. @JsonIgnoreProperties ব্যবহৃত হয় যখন আপনি JSON থেকে অজানা প্রোপার্টি উপেক্ষা করতে চান, যেমন পুরনো বা অবাঞ্ছিত ফিল্ড।
  2. @JsonAnySetter ব্যবহৃত হয় যখন আপনি JSON এর অজানা ফিল্ডগুলোকে একটি ডাইনামিক ডেটা স্ট্রাকচার (যেমন: Map) এ সংরক্ষণ করতে চান।
  3. ObjectMapper কনফিগারেশনের মাধ্যমে আপনি JSON Parsing-এ অজানা প্রোপার্টি গুলি উপেক্ষা করতে পারেন।

এই অ্যানোটেশনগুলি আপনাকে JSON ডেটা প্রক্রিয়াকরণের ক্ষেত্রে আরও নমনীয়তা এবং সঠিকতা প্রদান করে।

Content added By

@JsonIgnoreProperties দিয়ে multiple properties exclude করা

205

@JsonIgnoreProperties Jackson-এর একটি অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় নির্দিষ্ট প্রপার্টি বা ফিল্ডগুলোকে অগ্রাহ্য (ignore) করার জন্য ব্যবহৃত হয়। এটি ক্লাস লেভেলেও ব্যবহার করা যেতে পারে, এবং একাধিক প্রপার্টি বা ফিল্ডকে exclude (অন্যথায় ignore) করার জন্য ব্যবহার করা যায়।


@JsonIgnoreProperties এর মূল বৈশিষ্ট্য

  1. Multiple Properties Exclusion:
    • এটি একাধিক ফিল্ড বা প্রপার্টি exclude করার জন্য ব্যবহার করা যেতে পারে।
  2. Serialization এবং Deserialization:
    • JSON-এ যেসব ফিল্ড বা প্রপার্টি অন্তর্ভুক্ত করতে চান না, সেগুলি Serialization (Java Object থেকে JSON) এবং Deserialization (JSON থেকে Java Object) উভয় প্রক্রিয়ায় exclude করা সম্ভব।
  3. Class Level এবং Field Level:
    • এটি ক্লাস বা ফিল্ড-লেভেলেও প্রয়োগ করা যেতে পারে। ক্লাস লেভেলে ব্যবহার করলে এটি পুরো ক্লাসের ফিল্ডগুলোর উপর প্রভাব ফেলে।

@JsonIgnoreProperties এর Syntax

@JsonIgnoreProperties(value = {"property1", "property2"})
  • value: এটি যে ফিল্ডগুলোকে ignore করবে, সেগুলোর নামের একটি অ্যারে।
  • ignoreUnknown: যদি JSON ডেটাতে কোনো অজ্ঞাত (unknown) প্রপার্টি থাকে, তবে সেগুলোকে ignore করতে ignoreUnknown = true ব্যবহার করা যেতে পারে।

@JsonIgnoreProperties দিয়ে Multiple Properties Exclude করা

উদাহরণ 1: ক্লাস লেভেলে @JsonIgnoreProperties ব্যবহার

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(value = {"email", "address"})
public class User {
    private int id;
    private String name;
    private String email;
    private String address;

    // Constructors, Getters, and Setters
    public User(int id, String name, String email, String address) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.address = address;
    }

    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;
    }

    public String getAddress() {
        return address;
    }

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

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        User user = new User(1, "John Doe", "john@example.com", "1234 Elm Street");

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

        System.out.println(json);
    }
}

Output (Without email and address):

{
  "id": 1,
  "name": "John Doe"
}

ব্যাখ্যা:

  • @JsonIgnoreProperties(value = {"email", "address"}) ব্যবহার করে, email এবং address ফিল্ডগুলো JSON Serialization থেকে বাদ পড়েছে।

উদাহরণ 2: ignoreUnknown = true ব্যবহার

এটি তখন ব্যবহার করা হয় যখন JSON ডেটায় কিছু অজ্ঞাত ফিল্ড থাকে, এবং আপনি সেগুলোকে ignore করতে চান।

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;

    // Constructors, Getters, and Setters
}

Deserialization Example (With Unknown Property):

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnoreUnknownExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1, \"name\":\"John Doe\", \"email\":\"john@example.com\", \"unknownField\":\"someValue\"}";

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

        System.out.println("User ID: " + user.getId());
        System.out.println("User Name: " + user.getName());
        System.out.println("User Email: " + user.getEmail());
    }
}

Output:

User ID: 1
User Name: John Doe
User Email: john@example.com

ব্যাখ্যা:

  • ignoreUnknown = true ব্যবহার করার ফলে unknownField নামের অজ্ঞাত প্রপার্টি JSON থেকে ডেসিরিয়ালাইজ করার সময় বাদ দেওয়া হয়েছে এবং এটি User অবজেক্টের মধ্যে উপস্থিত হয়নি।

Field Level @JsonIgnoreProperties ব্যবহার

আপনি যদি শুধুমাত্র একটি নির্দিষ্ট ফিল্ডে @JsonIgnoreProperties ব্যবহার করতে চান, তাহলে সেটি একক ফিল্ডের উপর প্রয়োগ করা যাবে।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

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

    @JsonIgnoreProperties("email")
    private String email;

    // Constructors, Getters, and Setters
}

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

  1. Multiple Fields Exclusion:
    • একাধিক ফিল্ড বা প্রপার্টি একত্রে exclude করা যায়। এর মাধ্যমে JSON ফিল্ডের মধ্যে কোন ফিল্ড থাকা উচিত এবং কোনটি বাদ দেওয়া উচিত তা সহজে নিয়ন্ত্রণ করা যায়।
  2. Backward Compatibility:
    • যদি JSON ফরম্যাটে নতুন ফিল্ড যুক্ত হয় এবং আপনি পুরনো ক্লাসে কাজ করতে চান, তাহলে ignoreUnknown = true ব্যবহার করে নতুন অজ্ঞাত ফিল্ড গুলি বাদ দেওয়া সম্ভব।
  3. Security:
    • সিকিউরিটি কারণে আপনি কিছু সেনসিটিভ ফিল্ড (যেমন পাসওয়ার্ড) সরাসরি JSON থেকে বাদ দিতে পারেন, যাতে সেগুলি আউটপুটে প্রদর্শিত না হয়।
  4. Custom Exclusions:
    • Serialization এবং Deserialization প্রক্রিয়ার সময় বিশেষভাবে নির্দিষ্ট ফিল্ডগুলো exclude করার জন্য @JsonIgnoreProperties অ্যানোটেশনটি অত্যন্ত কার্যকর।
  • @JsonIgnoreProperties একটি শক্তিশালী টুল, যা Jackson JSON প্রক্রিয়ার সময় একাধিক ফিল্ড বা প্রপার্টি exclude (অগ্রাহ্য) করার জন্য ব্যবহৃত হয়।
  • এটি ক্লাস বা ফিল্ড-লেভেলেও প্রয়োগ করা যায় এবং এটি ignoreUnknown = true সহ অজ্ঞাত প্রপার্টি ignore করতে সাহায্য করে।
  • JSON Serialization এবং Deserialization-এর সময় বিশেষ ফিল্ড বাদ দেওয়ার জন্য এটি কার্যকর একটি অ্যানোটেশন।
Content added By

Serialization এবং Deserialization এ unknown properties manage করা

310

Jackson দিয়ে Serialization এবং Deserialization করার সময় unknown properties সমস্যা হতে পারে, বিশেষত যখন JSON ডেটার ফিল্ড নাম Java ক্লাসের ফিল্ড নামের সঙ্গে মেলে না। এই সমস্যা ব্যবস্থাপনার জন্য Jackson বিভিন্ন উপায় প্রদান করে।

Unknown Properties এর সমস্যা

যখন একটি JSON ফাইল Java ক্লাসের ফিল্ডের বাইরে অতিরিক্ত প্রোপার্টি থাকে, তখন Jackson ডিফল্টভাবে UnrecognizedPropertyException তৈরি করবে।

উদাহরণ:

{
    "id": 1,
    "name": "Rahim",
    "email": "rahim@example.com",
    "unknown_field": "extra_value"
}

এখন, যদি unknown_field আপনার Java ক্লাসে না থাকে, তাহলে Jackson UnrecognizedPropertyException তৈরি করবে।

Jackson-এ Unknown Properties Manage করার কৌশল

Jackson-এ unknown properties হ্যান্ডেল করার জন্য কিছু জনপ্রিয় কৌশল রয়েছে। নিচে সেগুলোর বিশদ আলোচনা করা হলো।


1. @JsonIgnoreProperties ব্যবহার করা

@JsonIgnoreProperties অ্যানোটেশন Jackson-এ unknown properties উপেক্ষা করতে ব্যবহৃত হয়। এটি JSON ডেসিরিয়ালাইজ করার সময় অতিরিক্ত প্রোপার্টি উপেক্ষা করে, এবং কোন exception তৈরি হয় না।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // Getters and Setters
}

এখানে, ignoreUnknown = true সেট করা হলে, JSON-এ যদি কোনো অতিরিক্ত ফিল্ড থাকে, তা উপেক্ষা করা হবে এবং UnrecognizedPropertyException তৈরি হবে না।

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

        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

এখানে unknown_field JSON ডেটা উপেক্ষা করা হয়েছে, এবং কোনো exception ছাড়াই ডেসিরিয়ালাইজেশন সম্পন্ন হয়েছে।


2. ObjectMapper Configuration দিয়ে Unknown Properties উপেক্ষা করা

ObjectMapper ব্যবহার করার সময়, FAIL_ON_UNKNOWN_PROPERTIES কনফিগারেশনটি বন্ধ করে unknown properties উপেক্ষা করা যায়।

ব্যবহার:

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

public class ObjectMapperConfigExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

        ObjectMapper mapper = new ObjectMapper();
        // Disable FAIL_ON_UNKNOWN_PROPERTIES
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

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

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

Output:

ID: 1
Name: Rahim

এখানে, FAIL_ON_UNKNOWN_PROPERTIES ফিচারটি false সেট করা হয়েছে, যার ফলে unknown properties উপেক্ষা করা হয়েছে এবং কোনো exception তৈরি হয়নি।


3. @JsonAnySetter ব্যবহার করা

Jackson @JsonAnySetter অ্যানোটেশনটি ব্যবহার করা যেতে পারে, যা একটি map বা collection ফিল্ডে JSON-এ থাকা unknown properties সংরক্ষণ করতে সক্ষম। এটি আপনি যখন জানেন যে কিছু অতিরিক্ত প্রোপার্টি থাকবে, তবে সেগুলো Dynamic ভাবে Map বা List এ সংগ্রহ করতে পারেন।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;

public class User {
    private int id;
    private String name;
    private Map<String, Object> additionalProperties = new HashMap<>();

    @JsonAnySetter
    public void setAdditionalProperties(String key, Object value) {
        this.additionalProperties.put(key, value);
    }

    // Getters and Setters
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAnySetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

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

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
        System.out.println("Additional Properties: " + user.getAdditionalProperties());
    }
}

Output:

ID: 1
Name: Rahim
Additional Properties: {unknown_field=extra_value}

এখানে @JsonAnySetter ব্যবহার করে unknown field unknown_field Dynamic ভাবে additionalProperties মেপে যোগ করা হয়েছে।


4. @JsonIgnore ব্যবহার করা

Jackson-এ @JsonIgnore অ্যানোটেশন ব্যবহার করে একটি নির্দিষ্ট ফিল্ডকে Serialization এবং Deserialization থেকে বাদ দেওয়া যায়। যদি আপনার কোনো ফিল্ডকে সম্পূর্ণভাবে অগ্রাহ্য করতে চান, তাহলে এটি ব্যবহার করতে পারেন।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonIgnore;

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

    @JsonIgnore
    private String email; // This field will be ignored in both serialization and deserialization

    // Getters and Setters
}

5. @JsonDeserialize@JsonSerialize এর মাধ্যমে কাস্টম ডেসিরিয়ালাইজেশন হ্যান্ডলিং

আপনি Custom Deserializer তৈরি করে বিশেষ কিছু unknown properties হ্যান্ডেল করতে পারেন। এটি তখন প্রয়োজনীয় হতে পারে যখন আপনার ডেটাতে কিছু প্রপার্টি থাকে যা আগেই ডিফাইন করা হয়নি এবং সেগুলোর জন্য বিশেষভাবে ডেসিরিয়ালাইজার প্রয়োগ করতে হয়।

ব্যবহার:

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

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

    @JsonDeserialize(using = CustomUnknownPropertyDeserializer.class)
    private String unknownProperty;

    // Getters and Setters
}

  1. @JsonIgnoreProperties: JSON থেকে অতিরিক্ত বা unknown ফিল্ডগুলোকে উপেক্ষা করার জন্য ব্যবহার করা হয়।
  2. FAIL_ON_UNKNOWN_PROPERTIES: ObjectMapper কনফিগারেশনের মাধ্যমে unknown properties উপেক্ষা করা যায়।
  3. @JsonAnySetter: JSON-এর unknown properties ম্যানেজ করার জন্য একটি Map বা Collection ফিল্ডে যুক্ত করার সুযোগ দেয়।
  4. @JsonIgnore: নির্দিষ্ট ফিল্ডগুলোর উপেক্ষা করার জন্য ব্যবহার করা হয়।

এভাবে Jackson-এ unknown properties manage করার জন্য বিভিন্ন টেকনিক ব্যবহার করা যায়, যা আপনার JSON ডেসিরিয়ালাইজেশন প্রক্রিয়াকে আরো নমনীয় এবং শক্তিশালী করে তোলে।

Content added By

উদাহরণ সহ Ignore Unknown Properties এর ব্যবহারের কৌশল

292

Jackson এর @JsonIgnoreProperties অ্যানোটেশন এবং ObjectMapper কনফিগারেশনের মাধ্যমে আপনি JSON ডেসিরিয়ালাইজেশনের সময় অজানা বা অপ্রত্যাশিত প্রপার্টি উপেক্ষা করতে পারেন। এটি বিশেষভাবে ব্যবহারী যখন JSON ডেটা আপনার Java ক্লাসের সাথে পুরোপুরি মেলে না বা সেখানে অতিরিক্ত ফিল্ড থাকতে পারে।


@JsonIgnoreProperties Annotation

Jackson-এর @JsonIgnoreProperties অ্যানোটেশনটি ক্লাসের উপর প্রয়োগ করা হয় এবং এটি নির্দেশ করে যে কোনো অজানা প্রপার্টি বা অতিরিক্ত ফিল্ড মডেল ক্লাসে ম্যাপ না করেই উপেক্ষা করতে হবে।


@JsonIgnoreProperties এর ব্যবহার

উদাহরণ 1: @JsonIgnoreProperties Annotation

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class IgnoreUnknownPropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\": 1, \"name\": \"Rahim\", \"extraField\": \"extraValue\"}";

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

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
    }
}
Explanation:
  • @JsonIgnoreProperties(ignoreUnknown = true) অ্যাপ্লিকেশনটি বলে যে JSON ডেটাতে যদি কোনো অতিরিক্ত বা অজানা ফিল্ড থাকে, তবে তা উপেক্ষা করা হবে এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া চালু থাকবে।
  • উপরের উদাহরণে extraField নামক ফিল্ডটি User ক্লাসের মধ্যে উপস্থিত না থাকলেও, ObjectMapper সেই ফিল্ডটিকে উপেক্ষা করে ডেসিরিয়ালাইজ করবে।
JSON Output:
{
  "ID": 1,
  "Name": "Rahim"
}

ObjectMapper-এ FAIL_ON_UNKNOWN_PROPERTIES সেটিং ব্যবহার

এছাড়া আপনি ObjectMapper কনফিগারেশন ব্যবহার করে global ভাবে অজানা প্রপার্টি উপেক্ষা করতে পারেন।

উদাহরণ 2: FAIL_ON_UNKNOWN_PROPERTIES ব্যবহার

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

public class ObjectMapperIgnoreUnknownPropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\": 1, \"name\": \"Rahim\", \"extraField\": \"extraValue\"}";

        // Create ObjectMapper and configure to ignore unknown properties globally
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

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

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
    }
}
Explanation:
  • mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) এই কনফিগারেশনটি নিশ্চিত করে যে JSON ডেটায় যদি কোনো অজানা প্রপার্টি থাকে, তবে তা ডেসিরিয়ালাইজেশনে বাধা সৃষ্টি করবে না, এবং এগুলি উপেক্ষা করা হবে।
JSON Output:
{
  "ID": 1,
  "Name": "Rahim"
}

@JsonIgnoreProperties এবং ObjectMapper কনফিগারেশন ব্যবহারের মধ্যে পার্থক্য

পদ্ধতিবর্ণনা
@JsonIgnorePropertiesএকটি ক্লাসের মধ্যে অজানা প্রপার্টি উপেক্ষা করতে ব্যবহৃত হয়, এটি শুধুমাত্র ঐ ক্লাসের জন্য কার্যকর।
ObjectMapper কনফিগারেশনপুরো প্রজেক্টে বা অ্যাপ্লিকেশনে অজানা প্রপার্টি উপেক্ষা করতে ব্যবহার করা হয়।

@JsonIgnore এবং @JsonIgnoreProperties এর মধ্যে পার্থক্য

বৈশিষ্ট্য@JsonIgnore@JsonIgnoreProperties
ফোকাসএকটি ফিল্ড বা প্রপার্টি Serialization/Deserialization থেকে বাদ দেওয়া।ক্লাসের ভিতরের সব ফিল্ড বা একাধিক অজানা ফিল্ড Serialization/Deserialization থেকে বাদ দেওয়া।
ব্যবহারশুধুমাত্র একটি নির্দিষ্ট ফিল্ডের ক্ষেত্রে।একটি ক্লাসের জন্য সব অজানা প্রপার্টি উপেক্ষা করতে।

  1. @JsonIgnoreProperties(ignoreUnknown = true) এবং ObjectMapper এর FAIL_ON_UNKNOWN_PROPERTIES ব্যবহার করে JSON ডেটার অজানা ফিল্ড গুলোকে উপেক্ষা করা যেতে পারে।
  2. যখন আপনার JSON ডেটায় অতিরিক্ত বা অপ্রত্যাশিত প্রপার্টি থাকে, তখন এটি বিশেষভাবে উপকারী, এবং এতে ডেসিরিয়ালাইজেশন ফেইল হওয়া এড়ানো যায়।
  3. এই পদ্ধতিগুলো ব্যবহার করলে আপনি আপনার JSON প্রসেসিং আরও নমনীয় ও robust করতে পারবেন।
Content added By
Promotion

Are you sure to start over?

Loading...