Jackson JSON Views একটি কার্যকর ফিচার যা জটিল ডেটা স্ট্রাকচারে JSON Serialization এবং Deserialization-এ data filtering করতে সাহায্য করে। এটি মূলত একাধিক কনটেক্সটে একই ডেটা স্ট্রাকচার ব্যবহার করার সময় ভিন্ন ভিন্ন ফিল্ড দেখানোর জন্য ব্যবহৃত হয়।
JSON Views কী?
JSON Views-এর মাধ্যমে আমরা নির্ধারণ করতে পারি কোন কোন ফিল্ড JSON আউটপুটে অন্তর্ভুক্ত হবে। এটি সাধারণত API-তে ডেটার সংবেদনশীলতা বা ভিন্ন ভিন্ন ইউজার টাইপের জন্য ডেটা দেখানোর কাস্টমাইজেশনে ব্যবহৃত হয়।
JSON Views কনফিগার করার ধাপসমূহ
1. View Class ডিফাইন করুন
প্রথমে ভিন্ন ভিন্ন ভিউয়ের জন্য marker interfaces তৈরি করতে হবে।
public class Views {
public static class Public {} // সাধারণ ইউজারদের জন্য ভিউ
public static class Internal extends Public {} // অ্যাডমিন বা অভ্যন্তরীণ ইউজারদের জন্য ভিউ
}
2. Model Class-এ ফিল্ডে ভিউ নির্ধারণ করুন
@JsonView এনোটেশন ব্যবহার করে ফিল্ডগুলোতে নির্ধারণ করুন কোন ভিউতে ফিল্ডটি অন্তর্ভুক্ত হবে।
import com.fasterxml.jackson.annotation.JsonView;
public class Product {
@JsonView(Views.Public.class)
private int id;
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Internal.class)
private double costPrice;
@JsonView(Views.Public.class)
private double sellingPrice;
// 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; }
public double getCostPrice() { return costPrice; }
public void setCostPrice(double costPrice) { this.costPrice = costPrice; }
public double getSellingPrice() { return sellingPrice; }
public void setSellingPrice(double sellingPrice) { this.sellingPrice = sellingPrice; }
}
3. JSON Serialization-এ ভিউ প্রয়োগ করুন
ObjectMapper-এর মাধ্যমে JSON Serialization করার সময় নির্দিষ্ট ভিউ ব্যবহার করুন।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class JSONViewsExample {
public static void main(String[] args) throws Exception {
// Sample Data
Product product = new Product();
product.setId(1);
product.setName("Laptop");
product.setCostPrice(500.00);
product.setSellingPrice(750.00);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// Public View Serialization
String publicViewJson = mapper
.writerWithView(Views.Public.class)
.writeValueAsString(product);
System.out.println("Public View:");
System.out.println(publicViewJson);
// Internal View Serialization
String internalViewJson = mapper
.writerWithView(Views.Internal.class)
.writeValueAsString(product);
System.out.println("\nInternal View:");
System.out.println(internalViewJson);
}
}
আউটপুট:
Public View:
{
"id" : 1,
"name" : "Laptop",
"sellingPrice" : 750.0
}
Internal View:
{
"id" : 1,
"name" : "Laptop",
"costPrice" : 500.0,
"sellingPrice" : 750.0
}
Complex Data Structure-এ JSON Views-এর প্রয়োগ
উদাহরণ: Nested Object বা Complex Structure
import com.fasterxml.jackson.annotation.JsonView;
public class Order {
@JsonView(Views.Public.class)
private int orderId;
@JsonView(Views.Public.class)
private String customerName;
@JsonView(Views.Internal.class)
private Product product;
// Getters and Setters
public int getOrderId() { return orderId; }
public void setOrderId(int orderId) { this.orderId = orderId; }
public String getCustomerName() { return customerName; }
public void setCustomerName(String customerName) { this.customerName = customerName; }
public Product getProduct() { return product; }
public void setProduct(Product product) { this.product = product; }
}
Complex Structure Serialization:
public class ComplexStructureExample {
public static void main(String[] args) throws Exception {
// Product Object
Product product = new Product();
product.setId(101);
product.setName("Smartphone");
product.setCostPrice(400.00);
product.setSellingPrice(600.00);
// Order Object
Order order = new Order();
order.setOrderId(1);
order.setCustomerName("Alice");
order.setProduct(product);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
// Public View Serialization
String publicViewJson = mapper
.writerWithView(Views.Public.class)
.writeValueAsString(order);
System.out.println("Public View:");
System.out.println(publicViewJson);
// Internal View Serialization
String internalViewJson = mapper
.writerWithView(Views.Internal.class)
.writeValueAsString(order);
System.out.println("\nInternal View:");
System.out.println(internalViewJson);
}
}
আউটপুট:
Public View:
{
"orderId" : 1,
"customerName" : "Alice",
"product" : {
"id" : 101,
"name" : "Smartphone",
"sellingPrice" : 600.0
}
}
Internal View:
{
"orderId" : 1,
"customerName" : "Alice",
"product" : {
"id" : 101,
"name" : "Smartphone",
"costPrice" : 400.0,
"sellingPrice" : 600.0
}
}
JSON Views এর ব্যবহার ক্ষেত্র
- Role-Based Data Filtering:
- Public vs Admin API ভিউতে আলাদা ডেটা ফিল্টার করা।
- Dynamic API Responses:
- ভিন্ন প্রকারের ইউজার বা ক্লায়েন্টের জন্য ভিন্ন JSON স্ট্রাকচার প্রদান।
- Security and Privacy:
- সংবেদনশীল ডেটা লুকানোর জন্য।
Jackson-এর JSON Views একটি শক্তিশালী টুল যা জটিল ডেটা স্ট্রাকচার-এ ফিল্ড লেভেলে কাস্টমাইজড JSON Serialization-এর জন্য আদর্শ। এটি API-এর ডেটা প্রক্রিয়াকরণে নমনীয়তা এবং নিরাপত্তা নিশ্চিত করে।
Read more