Jackson একটি JSON প্রসেসিং লাইব্রেরি যা Java অ্যাপ্লিকেশনে JSON ডেটা হ্যান্ডলিং সহজ করে। এটি Maven ব্যবহার করে সহজেই প্রজেক্টে যুক্ত করা যায়।
Maven Dependency
Jackson এর মূলত তিনটি প্রধান মডিউল রয়েছে:
jackson-core: JSON পার্সিং এবং জেনারেশন।jackson-annotations: JSON ডেটার কাস্টমাইজেশনের জন্য অ্যানোটেশন।jackson-databind: ObjectMapper এর মাধ্যমে JSON এবং Java Object এর মধ্যে রূপান্তর।
পূর্ণ ডিপেন্ডেন্সি সেটআপ:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.0</version>
</dependency>
Note: সাধারণত
jackson-databindযোগ করলেই বাকি দুটি মডিউল ডিপেন্ডেন্সি হিসেবে অন্তর্ভুক্ত হয়।
Jackson মডিউল ভিত্তিক Maven ডিপেন্ডেন্সি
1. Jackson Core
- JSON ডেটা পার্সিং এবং জেনারেশন।
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.0</version>
</dependency>
2. Jackson Annotations
- Jackson অ্যানোটেশন ব্যবহার করে JSON কাস্টমাইজেশন।
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.0</version>
</dependency>
3. Jackson Databind
- ObjectMapper ব্যবহার করে JSON এবং Java Object এর মধ্যে রূপান্তর।
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
4. Jackson Dataformat (Optional)
- JSON ছাড়াও XML, YAML, এবং অন্যান্য ফরম্যাট সাপোর্ট করার জন্য।
XML:
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.15.0</version> </dependency>YAML:
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.15.0</version> </dependency>
Gradle Dependency
যদি Gradle ব্যবহার করেন:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.15.0'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.15.0'
ObjectMapper সেটআপ এবং ব্যবহার
Jackson ব্যবহার করতে হলে সাধারণত ObjectMapper ব্যবহার করা হয়। এটি JSON এবং Java Object এর মধ্যে রূপান্তর সহজ করে।
ObjectMapper উদাহরণ:
Serialization (Java Object → JSON):
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("John Doe", 30);
String json = objectMapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
}
}
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getters এবং Setters
}
Output:
{"name":"John Doe","age":30}
Deserialization (JSON → Java Object):
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"name\":\"John Doe\",\"age\":30}";
User user = objectMapper.readValue(json, User.class);
System.out.println("Deserialized User: " + user.getName() + ", Age: " + user.getAge());
}
}
Jackson Annotations উদাহরণ
Jackson অ্যানোটেশন ব্যবহার করে JSON ডেটা কাস্টমাইজ করা যায়।
1. @JsonProperty
JSON ফিল্ডের নাম কাস্টমাইজ করতে।
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_name")
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
2. @JsonIgnore
কোনো ফিল্ড JSON ডেটা থেকে বাদ দিতে।
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
private String name;
@JsonIgnore
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
3. @JsonInclude
শর্তসাপেক্ষে JSON ফিল্ড অন্তর্ভুক্ত করতে।
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private Integer age; // যদি null হয়, তাহলে JSON-এ অন্তর্ভুক্ত হবে না।
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
Spring Boot এর সাথে Jackson
Spring Boot-এ Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে। আপনি Spring Boot অ্যাপ্লিকেশনে সরাসরি ObjectMapper ব্যবহার করতে পারেন।
Spring Boot Controller উদাহরণ:
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public User createUser(@RequestBody User user) {
return user;
}
}
Request JSON:
{
"name": "John Doe",
"age": 30
}
Response JSON:
{
"name": "John Doe",
"age": 30
}
- Jackson-এর জন্য Maven ডিপেন্ডেন্সি যোগ করা খুব সহজ এবং Spring Boot-এ এটি ডিফল্টভাবে সাপোর্ট করে।
ObjectMapper-এর মাধ্যমে JSON এবং Java Object এর মধ্যে রূপান্তর করা যায়।- Jackson অ্যানোটেশন ব্যবহার করে JSON ডেটা কাস্টমাইজ করা সম্ভব।
- Spring Boot-এ এটি REST API ডেভেলপমেন্টকে সহজ এবং কার্যকর করে তোলে।
Jackson হলো একটি শক্তিশালী JSON প্রক্রিয়াকরণ লাইব্রেরি যা Java-তে JSON Serialization (Java Object থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java Object এ রূপান্তর) সহজ করে তোলে। Maven প্রজেক্টে Jackson অন্তর্ভুক্ত করতে jackson-databind, jackson-core, এবং jackson-annotations ডিপেনডেন্সি ব্যবহার করা হয়।
Jackson এর প্রয়োজনীয় ডিপেনডেন্সি
Maven প্রজেক্টের pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করুন:
<dependencies>
<!-- Jackson Databind: Serialization/Deserialization -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- সর্বশেষ ভার্সন -->
</dependency>
<!-- Jackson Core: JSON প্রসেসিং -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Jackson Annotations: বিভিন্ন অ্যানোটেশন -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.2</version>
</dependency>
</dependencies>
Jackson এর প্রধান মডিউল সমূহ
Jackson বিভিন্ন কাজের জন্য পৃথক মডিউল সরবরাহ করে:
| মডিউল | বিবরণ |
|---|---|
jackson-databind | JSON Serialization এবং Deserialization এর মূল কাজ। |
jackson-core | JSON প্রক্রিয়াকরণের জন্য নিম্ন-স্তরের API। |
jackson-annotations | Jackson এর অ্যানোটেশন যেমন @JsonProperty, @JsonIgnore ইত্যাদি। |
jackson-module-jaxb | JAXB অ্যানোটেশনগুলোর সমর্থনের জন্য। |
jackson-module-kotlin | Kotlin এর জন্য বিশেষ সমর্থন। |
Jackson অন্তর্ভুক্ত করার উদাহরণ
Step 1: Maven প্রজেক্ট সেটআপ
- Maven প্রজেক্ট তৈরি করুন।
pom.xmlফাইলে উপরের ডিপেনডেন্সি যোগ করুন।- Maven প্রজেক্ট রিফ্রেশ করুন (
mvn clean installচালান)।
Step 2: JSON Serialization এবং Deserialization এর উদাহরণ
মডেল ক্লাস তৈরি
public class User {
private String name;
private int age;
private String email;
// Getters and Setters
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 String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Serialization (Java Object থেকে JSON)
import com.fasterxml.jackson.databind.ObjectMapper;
public class SerializationExample {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("Alice");
user.setAge(30);
user.setEmail("alice@example.com");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
}
}
Output:
{"name":"Alice","age":30,"email":"alice@example.com"}
Deserialization (JSON থেকে Java Object)
import com.fasterxml.jackson.databind.ObjectMapper;
public class DeserializationExample {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"Bob\",\"age\":25,\"email\":\"bob@example.com\"}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println("Name: " + user.getName());
System.out.println("Age: " + user.getAge());
System.out.println("Email: " + user.getEmail());
}
}
Output:
Name: Bob
Age: 25
Email: bob@example.com
Jackson অ্যানোটেশন সমর্থন
Jackson এর jackson-annotations মডিউলটি ব্যবহার করে JSON প্রক্রিয়াকরণকে কাস্টমাইজ করা যায়। প্রধান অ্যানোটেশনসমূহ:
1. @JsonProperty
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_name")
private String name;
private int age;
@JsonProperty("user_email")
private String email;
// Getters and Setters
}
Serialized Output:
{"user_name":"Alice","age":30,"user_email":"alice@example.com"}
2. @JsonIgnore
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
private String name;
@JsonIgnore
private String password;
// Getters and Setters
}
Serialized Output:
{"name":"Alice"}
3. @JsonInclude
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private String email;
// Getters and Setters
}
Serialized Output (If email is null):
{"name":"Alice"}
- Jackson এর মাধ্যমে JSON প্রক্রিয়াকরণ অত্যন্ত সহজ এবং কার্যকর।
- Maven ব্যবহার করে
jackson-databind,jackson-core, এবংjackson-annotationsঅন্তর্ভুক্ত করে JSON Serialization/Deserialization পরিচালনা করা যায়। - Jackson Annotations ব্যবহার করে JSON আউটপুট কাস্টমাইজ করা সম্ভব।
- Spring Boot প্রকল্পে Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে, এবং এটি REST API JSON প্রক্রিয়াকরণকে সহজ করে।
Jackson একটি শক্তিশালী JSON প্রসেসিং লাইব্রেরি যা Java-তে serialization, deserialization এবং JSON ডেটা হ্যান্ডল করার জন্য ব্যাপকভাবে ব্যবহৃত হয়। Gradle ব্যবহার করে আপনার প্রকল্পে Jackson অন্তর্ভুক্ত করা খুব সহজ।
1. Gradle-এ Jackson অন্তর্ভুক্ত করার ধাপসমূহ
Step 1: Gradle প্রকল্প সেটআপ করুন
Gradle-এ আপনার build.gradle ফাইল খুলুন।
Step 2: Dependencies যোগ করুন
মৌলিক Jackson ডিপেন্ডেন্সি:
dependencies {
// Jackson Databind: Core Library for JSON Serialization and Deserialization
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
// Optional: Core Jackson modules
implementation 'com.fasterxml.jackson.core:jackson-core:2.15.2'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.15.2'
}
Additional Modules (Optional):
Java 8 Date/Time Support:
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2'XML Support:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.2'YAML Support:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'Validation (JSON Schema Support):
implementation 'com.fasterxml.jackson.module:jackson-module-jsonSchema:2.15.2'Kotlin Support:
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2'
2. Gradle প্রকল্প Build এবং Sync করা
Step 1: Gradle Build চালান
Gradle Build রান করতে gradle build কমান্ড ব্যবহার করুন অথবা IntelliJ IDEA/Eclipse-এর Gradle টুল ব্যবহার করুন।
Step 2: Dependencies Sync করুন
Gradle ফাইল সেভ করার পর প্রকল্পে ডিপেন্ডেন্সিগুলো সিঙ্ক করুন। IntelliJ IDEA-তে Refresh Gradle Project ক্লিক করুন।
3. Jackson অন্তর্ভুক্ত করার পর টেস্ট কোড
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
User user = new User(101, "John Doe", "john.doe@example.com");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
}
}
class User {
public int id;
public String name;
public String email;
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
String json = """
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com"
}
""";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println("Deserialized User: " + user.name);
}
}
4. Common Jackson Annotations
@JsonProperty:- JSON ফিল্ডকে Java ফিল্ডের সঙ্গে ম্যাপ করে।
@JsonProperty("user_id") public int id;@JsonIgnore:- নির্দিষ্ট ফিল্ড Serialization এবং Deserialization থেকে বাদ দেয়।
@JsonIgnore public String password;@JsonInclude:- শুধুমাত্র non-null বা non-default ভ্যালু অন্তর্ভুক্ত করতে ব্যবহৃত।
@JsonInclude(JsonInclude.Include.NON_NULL)@JsonFormat:- তারিখ এবং সময় ফরম্যাট কাস্টমাইজ করতে।
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") public LocalDate birthDate;@JsonCreatorএবং@JsonValue:- Enum Mapping বা Custom Deserialization-এর জন্য।
@JsonCreator public static Status fromValue(String value) { ... } @JsonValue public String toValue() { ... }
5. Gradle Project Structure
project/
├── build.gradle
├── settings.gradle
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── Main.java
│ │ │ ├── User.java
│ ├── test/
│ ├── java/
│ ├── SerializationTest.java
│ ├── DeserializationTest.java
6. Testing with JUnit
JUnit Test Example for Serialization:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class SerializationTest {
@Test
public void testSerialization() throws Exception {
User user = new User(101, "John Doe", "john.doe@example.com");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
assertTrue(json.contains("\"id\":101"));
assertTrue(json.contains("\"name\":\"John Doe\""));
assertTrue(json.contains("\"email\":\"john.doe@example.com\""));
}
}
JUnit Test Example for Deserialization:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class DeserializationTest {
@Test
public void testDeserialization() throws Exception {
String json = """
{
"id": 101,
"name": "John Doe",
"email": "john.doe@example.com"
}
""";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
assertEquals(101, user.id);
assertEquals("John Doe", user.name);
assertEquals("john.doe@example.com", user.email);
}
}
- Gradle ব্যবহার করে Jackson লাইব্রেরি সহজেই অন্তর্ভুক্ত এবং পরিচালনা করা যায়।
- Serialization এবং Deserialization টেস্ট করার মাধ্যমে কোডের গুণগত মান নিশ্চিত করা যায়।
- Optional মডিউল ব্যবহার করে XML, YAML, এবং JSON Schema সাপোর্ট যোগ করা যায়।
Gradle এবং Jackson-এর সমন্বয় API ডেভেলপমেন্ট আরও সহজ এবং কার্যকর করে তোলে।
Jackson Annotations Java-তে JSON serialization এবং deserialization কাস্টমাইজ করার জন্য ব্যবহৃত হয়। IntelliJ IDEA বা Eclipse-এ একটি প্রজেক্ট সেটআপ করা খুবই সহজ এবং নিচে ধাপে ধাপে সেটআপ প্রক্রিয়া ব্যাখ্যা করা হয়েছে।
1. প্রজেক্ট তৈরির জন্য প্রস্তুতি
- প্রয়োজনীয় সফটওয়্যার:
- IntelliJ IDEA (Community বা Ultimate Edition)
- Eclipse IDE (Enterprise Edition)
- JDK (Java Development Kit) 11 বা তার ঊর্ধ্ব সংস্করণ
- Maven/Gradle:
প্রজেক্টে ডিপেনডেন্সি ম্যানেজমেন্টের জন্য Maven বা Gradle ব্যবহার করা উচিত।
2. IntelliJ IDEA-তে প্রজেক্ট সেটআপ
ধাপ 1: নতুন Maven প্রজেক্ট তৈরি করা
- IntelliJ IDEA খুলুন এবং
New Projectনির্বাচন করুন। Mavenনির্বাচন করুন এবং JDK সঠিকভাবে সেট করুন।- প্রজেক্টের নাম এবং লোকেশন দিন।
Finishবাটনে ক্লিক করুন।
ধাপ 2: Maven Dependencies যুক্ত করা
- প্রজেক্টের
pom.xmlফাইল খুলুন। - নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependencies>
<!-- Jackson Core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- Jackson Annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.2</version>
</dependency>
<!-- JUnit for Testing -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
ধাপ 3: Maven Project Synchronize করা
- IntelliJ IDEA স্বয়ংক্রিয়ভাবে Maven ডিপেনডেন্সি ডাউনলোড করবে।
- যদি না করে, তাহলে
File > Sync Project with Mavenনির্বাচন করুন।
ধাপ 4: Sample Class এবং Jackson Annotations ব্যবহার করা
- একটি নতুন Java Class তৈরি করুন, যেমন
User.java। - Jackson Annotations ব্যবহার করুন:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_id")
private int id;
private String name;
@JsonIgnore
private String password;
// 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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
ধাপ 5: Main Class তৈরি এবং Test করা
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
User user = new User();
user.setId(1);
user.setName("Alice");
user.setPassword("secret");
ObjectMapper mapper = new ObjectMapper();
// Serialize
String json = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
// Deserialize
String jsonInput = "{\"user_id\":2,\"name\":\"Bob\"}";
User newUser = mapper.readValue(jsonInput, User.class);
System.out.println("Deserialized User: " + newUser.getName());
}
}
ধাপ 6: প্রজেক্ট রান করা
Mainক্লাসে ডান-ক্লিক করেRunনির্বাচন করুন।- আউটপুট যাচাই করুন।
3. Eclipse IDE-তে প্রজেক্ট সেটআপ
ধাপ 1: নতুন Maven প্রজেক্ট তৈরি
- Eclipse খুলুন এবং
File > New > Maven Projectনির্বাচন করুন। Create a simple projectঅপশন নির্বাচন করুন।- প্রজেক্টের গ্রুপ আইডি এবং আর্টিফ্যাক্ট আইডি দিন।
Finishক্লিক করুন।
ধাপ 2: Maven Dependencies যুক্ত করা
- প্রজেক্টের
pom.xmlফাইল খুলুন। - IntelliJ IDEA-এর মতো একই ডিপেনডেন্সি যোগ করুন।
ধাপ 3: Sample Class তৈরি এবং Test করা
- IntelliJ IDEA-এর মতো একই কোড ব্যবহার করুন।
- Eclipse-এর Run As > Java Application অপশন ব্যবহার করে প্রজেক্ট চালান।
4. Jackson Annotations সহ Features
1. @JsonProperty
@JsonProperty("full_name")
private String name;
- JSON ফিল্ডের নাম কাস্টমাইজ করতে ব্যবহার করা হয়।
2. @JsonIgnore
@JsonIgnore
private String password;
- একটি ফিল্ড serialization/deserialization থেকে বাদ দিতে ব্যবহৃত হয়।
3. @JsonInclude
@JsonInclude(JsonInclude.Include.NON_NULL)
private String email;
- null মান থাকা ফিল্ড JSON-এ অন্তর্ভুক্ত করা বন্ধ করতে ব্যবহার হয়।
4. @JsonFormat
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date birthDate;
- তারিখ ফরম্যাট নির্ধারণ করতে ব্যবহৃত হয়।
5. @JsonCreator এবং @JsonValue
- Custom deserialization এবং serialization জন্য।
@JsonCreator
public static User createFromJson(String json) {
// Custom logic
}
5. টেস্টিং এবং ডিবাগিং
- JUnit টেস্ট যুক্ত করা:
- IntelliJ IDEA বা Eclipse-এ JUnit ব্যবহার করে serialization/deserialization টেস্ট করুন।
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class UserTest {
@Test
void testSerialization() throws Exception {
User user = new User();
user.setId(1);
user.setName("Alice");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
assertEquals("{\"user_id\":1,\"name\":\"Alice\"}", json);
}
}
- Debugging:
- IntelliJ IDEA বা Eclipse-এর ডিবাগ মোড চালু করে JSON প্রসেসিং সংক্রান্ত সমস্যা নির্ণয় করুন।
- IntelliJ IDEA এবং Eclipse-এ Jackson প্রজেক্ট সেটআপ করা সহজ।
- Maven ডিপেনডেন্সি এবং Jackson Annotations ব্যবহার করে প্রজেক্ট কাস্টমাইজ করা যায়।
- Unit Testing এবং Debugging-এর মাধ্যমে serialization এবং deserialization সঠিকভাবে কাজ করছে তা নিশ্চিত করুন।
আপনার ডেভেলপমেন্ট প্রয়োজন অনুযায়ী IntelliJ IDEA বা Eclipse ব্যবহার করতে পারেন।
Jackson একটি শক্তিশালী এবং বহুল ব্যবহৃত JSON প্রসেসিং লাইব্রেরি যা Java Object এবং JSON এর মধ্যে রূপান্তর সহজ করে। Jackson-এর মূল উপাদানগুলোর মধ্যে রয়েছে ObjectMapper এবং বিভিন্ন Annotations যা JSON প্রসেসিংকে আরও কার্যকর এবং নমনীয় করে তোলে।
1. ObjectMapper এর পরিচিতি
ObjectMapper হল Jackson লাইব্রেরির প্রধান ক্লাস যা Java Object এবং JSON এর মধ্যে রূপান্তরের জন্য ব্যবহৃত হয়।
ObjectMapper এর মূল কার্যক্রম:
- Serialization: Java Object → JSON
- Deserialization: JSON → Java Object
ObjectMapper উদাহরণ
Serialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectMapperExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Create a Java object
User user = new User("John Doe", 30);
// Serialize Java object to JSON
String json = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
}
}
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
}
Output:
Serialized JSON: {"name":"John Doe","age":30}
Deserialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectMapperExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// JSON string
String json = "{\"name\":\"Jane Doe\",\"age\":25}";
// Deserialize JSON to Java object
User user = mapper.readValue(json, User.class);
System.out.println("Deserialized User: " + user.getName() + ", " + user.getAge());
}
}
Output:
Deserialized User: Jane Doe, 25
2. Jackson Annotations
Jackson বিভিন্ন ধরনের Annotations প্রদান করে, যা JSON প্রসেসিংকে নমনীয় এবং কাস্টমাইজ করার সুযোগ দেয়।
a. @JsonProperty
- ফিল্ড বা মেথডের কাস্টম JSON ফিল্ড নাম সেট করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_name")
private String name;
@JsonProperty("user_age")
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
}
Output JSON:
{"user_name":"John Doe","user_age":30}
b. @JsonIgnore
- নির্দিষ্ট ফিল্ডকে সিরিয়ালাইজ বা ডি-সিরিয়ালাইজ থেকে বাদ দিতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
private String name;
@JsonIgnore
private String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
// Getters and setters
}
Output JSON:
{"name":"John Doe"}
c. @JsonIgnoreProperties
- একাধিক ফিল্ডকে একসাথে বাদ দিতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties({"password", "email"})
public class User {
private String name;
private String password;
private String email;
public User(String name, String password, String email) {
this.name = name;
this.password = password;
this.email = email;
}
// Getters and setters
}
Output JSON:
{"name":"John Doe"}
d. @JsonFormat
- Date/Time ফিল্ডের কাস্টম ফরম্যাট সেট করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date eventDate;
public Event(String name, Date eventDate) {
this.name = name;
this.eventDate = eventDate;
}
// Getters and setters
}
Output JSON:
{"name":"Conference","eventDate":"2023-12-01"}
e. @JsonInclude
- শুধুমাত্র নন-নাল ফিল্ড বা নির্দিষ্ট কন্ডিশনের ফিল্ড JSON-এ রাখতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
Output JSON:
{"name":"John Doe"}
f. @JsonCreator এবং @JsonProperty
- কন্সট্রাক্টরের মাধ্যমে JSON ডি-সিরিয়ালাইজ করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
private int age;
@JsonCreator
public User(@JsonProperty("name") String name, @JsonProperty("age") int age) {
this.name = name;
this.age = age;
}
}
Input JSON:
{"name":"John Doe","age":30}
g. @JsonManagedReference এবং @JsonBackReference
- Bidirectional সম্পর্ক হ্যান্ডল করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;
import java.util.List;
public class Department {
private String name;
@JsonManagedReference
private List<Employee> employees;
}
public class Employee {
private String name;
@JsonBackReference
private Department department;
}
3. JSON Processing এর সুবিধা
- Serialization & Deserialization: সহজ এবং দ্রুত রূপান্তর।
- Custom Configuration: Annotations ব্যবহার করে কাস্টমাইজেশন।
- Performance: বড় JSON ডেটা প্রসেসিংয়ের জন্য কার্যকর।
- Integration: JPA/Hibernate এবং অন্যান্য ফ্রেমওয়ার্কের সাথে সহজেই ইন্টিগ্রেশন।
Jackson-এর ObjectMapper এবং Annotations JSON প্রসেসিংকে সহজ, দ্রুত এবং নমনীয় করে তোলে। Java Object এবং JSON-এর মধ্যে কাস্টম ম্যাপিং সেটআপ করার জন্য Jackson একটি আদর্শ টুল। Best Practices অনুসরণ করে এবং Common Annotations সঠিকভাবে ব্যবহার করে Jackson-এর পূর্ণ সুবিধা নেয়া সম্ভব।
Read more