Spring Boot একটি জনপ্রিয় Java framework, যা Java applications দ্রুত এবং সহজভাবে তৈরি করতে সহায়ক। Jackson হল একটি শক্তিশালী JSON-ব্যবস্থা লাইব্রেরি, যা Spring Boot-এ RESTful API তৈরির সময় সাধারণভাবে JSON serialization/deserialization এর জন্য ব্যবহৃত হয়।
Spring Boot ডিফল্টভাবে Jackson-কে JSON ম্যাপিংয়ের জন্য অন্তর্ভুক্ত করে, যার মাধ্যমে আপনি JSON ডেটা এবং Java অবজেক্টের মধ্যে কনভার্সন খুব সহজে করতে পারেন। আপনি Spring Boot এ Jackson ব্যবহার করে JSON থেকে Java অবজেক্ট এবং Java অবজেক্ট থেকে JSON এ রূপান্তর করার জন্য কাস্টম কনফিগারেশন ও অ্যানোটেশন ব্যবহার করতে পারেন।
Spring Boot এ Jackson সেটআপ এবং কনফিগারেশন
Spring Boot প্রকল্পে Jackson সেটআপ করার জন্য কোন অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না, কারণ Spring Boot ডিফল্টভাবে Jackson কে অন্তর্ভুক্ত করে। তবে আপনি যদি কাস্টম Jackson কনফিগারেশন করতে চান বা Jackson এর কিছু অ্যানোটেশন কাস্টমাইজ করতে চান, তাহলে আপনাকে কিছু সেটিংস কনফিগার করতে হবে।
Spring Boot এর জন্য Jackson Dependency
Spring Boot Starter Web (যেমন spring-boot-starter-web) এ Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে, তবে আপনি যদি Spring Boot প্রকল্পে Jackson ব্যবহারের জন্য নির্দিষ্ট ভাবে কনফিগারেশন করতে চান, তবে আপনাকে spring-boot-starter-json ডিপেনডেন্সি যোগ করতে হবে।
pom.xml এ Jackson dependency:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
Spring Boot এবং Jackson: JSON এর সাথে কাজ করা
Spring Boot ব্যবহার করে Jackson এর মাধ্যমে JSON Serialization এবং Deserialization খুবই সহজ। Spring Controller-এ JSON এর ইনপুট এবং আউটপুট নিয়ে কাজ করতে Jackson এর অ্যানোটেশনগুলি (যেমন @JsonProperty, @JsonFormat, @JsonIgnoreProperties) ব্যবহার করা যায়।
Spring Boot Controller Example:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/user")
public User getUser() {
// Create a User object
User user = new User(1, "John Doe", "john.doe@example.com");
// Return User object as JSON
return user;
}
}
class User {
private int id;
@JsonProperty("user_name") // Custom JSON Field Name
private String name;
private String email;
// Constructor
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// 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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
JSON Output:
{
"id": 1,
"user_name": "John Doe",
"email": "john.doe@example.com"
}
Jackson অ্যানোটেশনসমূহ Spring Boot এ ব্যবহার
Spring Boot-এ Jackson অ্যানোটেশন ব্যবহার করে বিভিন্ন ধরনের কাস্টম Serialization এবং Deserialization কনফিগার করা যেতে পারে।
১. @JsonProperty
@JsonProperty অ্যানোটেশন ব্যবহার করে ফিল্ডের নাম পরিবর্তন বা কাস্টম নাম সংজ্ঞায়িত করা যায়।
public class User {
@JsonProperty("user_id")
private int id;
@JsonProperty("user_name")
private String name;
// Constructor, Getters, Setters
}
২. @JsonIgnoreProperties
@JsonIgnoreProperties অ্যানোটেশন ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডগুলোকে JSON Serialization বা Deserialization থেকে বাদ দিতে পারেন।
@JsonIgnoreProperties({"email"})
public class User {
private int id;
private String name;
private String email;
// Constructors, Getters, Setters
}
৩. @JsonFormat
@JsonFormat অ্যানোটেশন ব্যবহার করে তারিখ ও সময়ের ফরম্যাট কাস্টমাইজ করা যায়।
import com.fasterxml.jackson.annotation.JsonFormat;
public class Event {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date eventDate;
// Getters and Setters
}
৪. @JsonInclude
@JsonInclude অ্যানোটেশন ব্যবহার করে শুধুমাত্র নির্দিষ্ট শর্তে ফিল্ডগুলো JSON-এ অন্তর্ভুক্ত করা হয়।
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private String email;
// Constructors, Getters, Setters
}
Spring Boot-এ Jackson কনফিগারেশন
Spring Boot-এ Jackson কনফিগারেশন করতে আপনি application.properties বা application.yml ফাইল ব্যবহার করতে পারেন।
Jackson এর মাধ্যমে JSON Date/Time Format কনফিগারেশন
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Dhaka
Spring Boot Configuration Class-এ Jackson কনফিগারেশন
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
// Enable feature to write dates in ISO 8601 format
mapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// Set property naming strategy
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
return mapper;
}
}
Spring Boot এবং Jackson-এর মধ্যে কাস্টম ম্যাপিং উদাহরণ
ধরা যাক, আপনি একটি REST API তৈরি করেছেন যা একটি User অবজেক্ট গ্রহণ করে এবং প্রক্রিয়া করে JSON আউটপুট প্রদান করে। আপনি JSON-এ কাস্টম প্রপার্টি নাম, তারিখ ফরম্যাট এবং filter অ্যাপ্লাই করতে পারেন।
Complete Example:
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@RestController
public class UserController {
@GetMapping("/user")
public User getUser() {
// Creating a User object
User user = new User(1, "John Doe", "john.doe@example.com", new Date());
// Returning the User object, which will be serialized to JSON
return user;
}
}
class User {
@JsonProperty("user_id")
private int id;
@JsonProperty("user_name")
private String name;
private String email;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date registrationDate;
// Constructor, Getters, and Setters
public User(int id, String name, String email, Date registrationDate) {
this.id = id;
this.name = name;
this.email = email;
this.registrationDate = registrationDate;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public Date getRegistrationDate() {
return registrationDate;
}
}
API Response (JSON Output):
{
"user_id": 1,
"user_name": "John Doe",
"email": "john.doe@example.com",
"registrationDate": "2024-12-21 15:30:00"
}
- Jackson Spring Boot-এ JSON Serialization এবং Deserialization এর জন্য ডিফল্ট লাইব্রেরি হিসেবে ব্যবহৃত হয়।
- Jackson Annotations যেমন
@JsonProperty,@JsonFormat,@JsonIgnorePropertiesSpring Boot অ্যাপ্লিকেশনগুলিতে JSON ডেটার কাস্টমাইজেশন এবং নিয়ন্ত্রণ করতে ব্যবহৃত হয়। - Spring Boot এ Jackson কনফিগারেশন এবং অ্যানোটেশন ব্যবহার করে JSON ফরম্যাটে প্রয়োজনীয় পরিবর্তন করতে সহজে কাস্টম লজিক প্রয়োগ করা যায়।
- Jackson কাস্টম Serializer এবং Deserializer তৈরি করে আরো উন্নত JSON প্রক্রিয়া সম্ভব।
Read more