Jackson-এর @JsonView এনোটেশন ব্যবহার করে বিভিন্ন ভিউ (Views) এর মাধ্যমে ডেটা ফিল্টার করা সম্ভব। এই পদ্ধতি বিশেষত API-এর মাধ্যমে বিভিন্ন প্রকার ইউজারদের জন্য বিভিন্ন ধরনের তথ্য প্রদর্শনের ক্ষেত্রে কার্যকর।
@JsonView কী এবং এটি কেন ব্যবহার করা হয়?
@JsonView Jackson-এর একটি এনোটেশন যা ক্লাস বা ফিল্ড লেভেলে ব্যবহৃত হয় এবং এটি নির্ধারণ করে কোন ভিউ-তে কোন ডেটা প্রদর্শিত হবে।
ব্যবহারিক প্রয়োগ:
- একাধিক ইউজার টাইপের জন্য ভিন্ন ডেটা প্রদর্শন।
- সংবেদনশীল তথ্য লুকানো।
- API-এর প্রয়োজন অনুযায়ী ডেটা ফিল্টার করা।
কীভাবে @JsonView কাজ করে?
ধাপ ১: ভিউ ক্লাস তৈরি করুন
প্রথমে একটি বা একাধিক ভিউ ক্লাস তৈরি করুন যা বিভিন্ন ভিউ রিপ্রেজেন্ট করবে।
ধাপ ২: মডেল ক্লাসে @JsonView ব্যবহার করুন
মডেল ক্লাসে ফিল্ডগুলোর উপরে @JsonView যোগ করুন এবং নির্দিষ্ট ভিউতে সেই ফিল্ডগুলো প্রদর্শন করুন।
ধাপ ৩: ObjectMapper-এ ভিউ সেট করুন
ObjectMapper-এ নির্দিষ্ট ভিউ দিয়ে JSON serialization সম্পন্ন করুন।
উদাহরণ: Different Views দিয়ে Data Filtering
উদাহরণ JSON Data:
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com",
"salary": 50000,
"department": "Engineering"
}
কোড:
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.ObjectMapper;
class Views {
// Public View
public static class Public {}
// Internal View (extends Public)
public static class Internal extends Public {}
}
class Employee {
@JsonView(Views.Public.class)
public int id;
@JsonView(Views.Public.class)
public String name;
@JsonView(Views.Internal.class)
public String email;
@JsonView(Views.Internal.class)
public double salary;
@JsonView(Views.Public.class)
public String department;
}
public class Main {
public static void main(String[] args) throws Exception {
Employee employee = new Employee();
employee.id = 101;
employee.name = "John Doe";
employee.email = "john.doe@example.com";
employee.salary = 50000;
employee.department = "Engineering";
ObjectMapper objectMapper = new ObjectMapper();
// Public View serialization
String publicViewJson = objectMapper.writerWithView(Views.Public.class).writeValueAsString(employee);
System.out.println("Public View: " + publicViewJson);
// Internal View serialization
String internalViewJson = objectMapper.writerWithView(Views.Internal.class).writeValueAsString(employee);
System.out.println("Internal View: " + internalViewJson);
}
}
আউটপুট:
Public View:
{
"id": 101,
"name": "John Doe",
"department": "Engineering"
}
Internal View:
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com",
"salary": 50000,
"department": "Engineering"
}
মূল ব্যবহারিক ক্ষেত্র:
- API Security:
- Public API তে সংবেদনশীল তথ্য (যেমন
email,salary) লুকানো। - Internal API-তে সম্পূর্ণ ডেটা দেখানো।
- Public API তে সংবেদনশীল তথ্য (যেমন
- ভিন্ন ভিউ ব্যবহার:
- Frontend এবং Backend-এর জন্য আলাদা ডেটা প্রদর্শন।
- ভিন্ন ভিউ-তে ডেটা ফিল্টার করে লোড কমানো।
- ডায়নামিক ডেটা প্রদর্শন:
- একাধিক ইউজার টাইপের জন্য একক API-তে ভিন্ন ভিউ-এর ব্যবহার।
উপকারিতা:
- Reusable View Classes: একবার ভিউ ক্লাস তৈরি করলে তা পুনরায় ব্যবহার করা যায়।
- Readable Code: সহজে বোঝা যায় কোন ফিল্ড কোন ভিউতে যাবে।
- Efficient Filtering: বড় JSON থেকে নির্দিষ্ট ডেটা ফিল্টার করার কার্যকর পদ্ধতি।
এই পদ্ধতিটি API ডেভেলপমেন্ট এবং ডেটা ফিল্টারিংয়ে অত্যন্ত কার্যকর এবং সহজেই পরিচালনাযোগ্য।
Read more