@JsonFormat হল Jackson-এর একটি বিশেষ অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় ডেটা ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়। এটি তারিখ, সময়, সংখ্যা, এবং অন্যান্য ডেটা ফরম্যাটিংয়ের জন্য খুবই কার্যকর।
@JsonFormat এর মূল বৈশিষ্ট্য
- Custom Data Formatting:
- JSON-এ তারিখ, সময় বা সংখ্যা প্রদর্শনের জন্য নির্দিষ্ট প্যাটার্ন প্রদান করে।
- Serialization এবং Deserialization:
- JSON থেকে Java Object এবং Java Object থেকে JSON-এ রূপান্তরের সময় নির্দিষ্ট ফরম্যাট নিশ্চিত করে।
- Shape Customization:
- ডেটার আউটপুট STRING, NUMBER, বা ARRAY আকারে নির্ধারণ করতে সাহায্য করে।
- Locale এবং TimeZone Management:
- নির্দিষ্ট টাইমজোন এবং লোকেল প্রয়োগ করার সুযোগ দেয়।
@JsonFormat এর গুরুত্বপূর্ণ প্যারামিটার
| প্যারামিটার | বর্ণনা |
|---|---|
shape | JSON আউটপুটের ধরন (যেমন: STRING, NUMBER, বা ARRAY)। |
pattern | কাস্টম প্যাটার্ন (যেমন: yyyy-MM-dd HH:mm:ss) নির্ধারণ। |
timezone | নির্দিষ্ট টাইমজোন প্রয়োগ। |
locale | নির্দিষ্ট লোকেল (ভাষা এবং দেশ) প্রয়োগ। |
@JsonFormat এর ব্যবহার
১. Date এবং Time Formatting
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 HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Meeting");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Meeting",
"eventDate": "2024-12-21 15:30:00"
}
২. Custom Number Formatting
import com.fasterxml.jackson.annotation.JsonFormat;
public class Product {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "###,###.##")
private double price;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Product product = new Product();
product.setName("Laptop");
product.setPrice(123456.789);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output:
{
"name": "Laptop",
"price": "123,456.79"
}
৩. Enum Formatting
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Status {
SUCCESS(1, "Operation Successful"),
FAILURE(0, "Operation Failed");
private final int code;
private final String message;
Status(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatEnumExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Status.SUCCESS);
System.out.println(json);
}
}
JSON Output:
{
"code": 1,
"message": "Operation Successful"
}
৪. Arrays বা Collections Formatting
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.List;
public class Person {
private String name;
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
private List<String> hobbies;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
public class JsonFormatArrayExample {
public static void main(String[] args) throws Exception {
Person person = new Person();
person.setName("Rahim");
person.setHobbies(Arrays.asList("Reading", "Gaming", "Traveling"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
["Rahim",["Reading","Gaming","Traveling"]]
৫. TimeZone Configuration
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date eventDate;
Spring Boot Configuration (application.properties):
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Dhaka
Serialization এবং Deserialization-এর জন্য @JsonFormat এর সুবিধা
- Custom Date/Time Formatting:
- API-এর জন্য নির্দিষ্ট ডেটা ফরম্যাট নিশ্চিত করে।
- TimeZone Management:
- TimeZone নির্দিষ্ট করার মাধ্যমে ডেটা সামঞ্জস্য রাখা।
- Number Formatting:
- সংখ্যা প্রদর্শনের জন্য নির্দিষ্ট প্যাটার্ন ব্যবহার করা।
- Enum Serialization:
- Enum এর জন্য Object বা String শেপ নির্ধারণ করা।
- Complex Data Structures:
- Arrays বা Collections ফরম্যাট কাস্টমাইজ করা।
@JsonFormat বনাম @JsonProperty
| বৈশিষ্ট্য | @JsonFormat | @JsonProperty |
|---|---|---|
| প্রধান উদ্দেশ্য | ডেটা ফরম্যাট এবং টাইমজোন নির্ধারণ। | JSON ফিল্ডের নাম কাস্টমাইজ করা। |
| প্রযোজ্য ক্ষেত্র | Date, Time, Number, Enum, Collections। | JSON ফিল্ডের নাম বা Getter/Setter Mapping। |
@JsonFormatব্যবহার করে JSON ফরম্যাটিং আরও নির্ভুল এবং কার্যকর করা সম্ভব।- এটি তারিখ, সময়, সংখ্যা, এবং অন্যান্য ডেটা কাস্টমাইজ করতে সহায়তা করে।
- JSON Serialization এবং Deserialization-এর সময় কনসিস্টেন্ট ডেটা ফরম্যাট নিশ্চিত করার জন্য এটি একটি গুরুত্বপূর্ণ টুল।
@JsonFormat একটি Jackson Annotation, যা JSON Serialization এবং Deserialization-এর সময় তারিখ এবং সময় ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়। এটি আপনার প্রয়োজন অনুযায়ী JSON ফরম্যাটে Date/Time-কে নিয়ন্ত্রণ করতে সাহায্য করে, যেমন কাস্টম প্যাটার্ন, টাইমজোন, লোকেল ইত্যাদি।
@JsonFormat এর বৈশিষ্ট্য
| বৈশিষ্ট্য | বর্ণনা |
|---|---|
pattern | তারিখ এবং সময়ের ফরম্যাট কাস্টমাইজ করার জন্য ব্যবহার হয় (যেমন: yyyy-MM-dd, HH:mm:ss ইত্যাদি)। |
shape | JSON ফিল্ডের আউটপুট শেপ নির্ধারণ করে (যেমন: STRING, NUMBER, ARRAY)। |
timezone | টাইমজোন সেট করার জন্য (যেমন: UTC, Asia/Kolkata)। |
locale | নির্দিষ্ট লোকেল (যেমন: en_US, fr_FR) সেট করতে। |
@JsonFormat ব্যবহার করার উদাহরণ
১. তারিখ এবং সময় ফরম্যাটিং
@JsonFormat Annotation ব্যবহার করে আপনি JSON এ Date এবং Time ফরম্যাট কাস্টমাইজ করতে পারেন।
Java Class Example:
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 HH:mm:ss", timezone = "Asia/Kolkata")
private Date eventDate;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getEventDate() {
return eventDate;
}
public void setEventDate(Date eventDate) {
this.eventDate = eventDate;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Workshop");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Workshop",
"eventDate": "2024-12-21 14:30:00"
}
@JsonFormat দিয়ে তারিখ এবং সময় ফরম্যাট কাস্টমাইজ করা
২. তারিখ এবং সময় ফরম্যাট কাস্টম প্যাটার্ন দিয়ে
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(pattern = "dd/MM/yyyy")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Conference");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Conference",
"eventDate": "21/12/2024"
}
@JsonFormat দিয়ে TimeZone নির্ধারণ
@JsonFormat এর timezone অ্যাট্রিবিউট ব্যবহার করে আপনি নির্দিষ্ট টাইমজোন সেট করতে পারেন।
Java Class Example:
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 HH:mm:ss", timezone = "UTC")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Global Conference");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Global Conference",
"eventDate": "2024-12-21 09:30:00"
}
@JsonFormat দিয়ে Locale নির্ধারণ
locale অ্যাট্রিবিউট ব্যবহার করে আপনি JSON এর তারিখ এবং সময় ফরম্যাটিং লোকেল ভিত্তিক কাস্টমাইজ করতে পারেন।
Java Class Example:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd", locale = "en_US")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Holiday");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Holiday",
"eventDate": "2024-12-21"
}
Spring Boot Configuration
Spring Boot অ্যাপ্লিকেশনে আপনি @JsonFormat ব্যবহার করতে পারেন, অথবা application.properties ফাইলে ডেটা ফরম্যাট সেট করতে পারেন:
application.properties Example:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Kolkata
Java 8 Date/Time API এবং @JsonFormat
Jackson Java 8 Date/Time API (যেমন LocalDate, LocalDateTime) কে সাপোর্ট করে। JavaTimeModule নিবন্ধন করার মাধ্যমে আপনি LocalDate, LocalDateTime-এ @JsonFormat অ্যাপ্লাই করতে পারেন।
JavaTimeModule Dependency (Maven):
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.15.2</version>
</dependency>
Java Class Example:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;
public class Event {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime eventDateTime;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.time.LocalDateTime;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Meeting");
event.setEventDateTime(LocalDateTime.now());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule()); // Register JavaTimeModule
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Meeting",
"eventDateTime": "2024-12-21 14:30:00"
}
@JsonFormatএকটি শক্তিশালী Annotation যা Jackson এর মাধ্যমে Date এবং Time ফরম্যাট কাস্টমাইজ করতে সাহায্য করে।@JsonFormatদিয়ে তারিখ এবং সময়ের কাস্টম প্যাটার্ন, টাইমজোন, এবং লোকেল নির্ধারণ করা যায়।- Java 8 Date/Time API এবং Spring Boot এর কনফিগারেশন সহ
@JsonFormatখুবই কার্যকরী। - এটি Date, Time, LocalDateTime এবং Number formatting ক্ষেত্রে অনেক সুবিধা প্রদান করে।
Jackson লাইব্রেরি ব্যবহার করে Date এবং Time ফরম্যাট কাস্টমাইজ করা এবং টাইমজোন সেট করা অনেক গুরুত্বপূর্ণ। এটি @JsonFormat অ্যানোটেশন দ্বারা সহজে করা যায়, যা JSON থেকে Java Object এবং Java Object থেকে JSON এ রূপান্তরের সময় তারিখ এবং সময়ের আউটপুট কাস্টমাইজ করতে সাহায্য করে।
এছাড়া, Spring Boot প্রজেক্টে আপনি গ্লোবালি ডেটা ফরম্যাট এবং টাইমজোন কনফিগারেশন করতে পারেন।
@JsonFormat অ্যানোটেশন
@JsonFormat অ্যানোটেশন ব্যবহার করে আপনি Date, Time এবং Number ফরম্যাট কাস্টমাইজ করতে পারেন। এটি pattern, timezone, এবং shape প্যারামিটারগুলি গ্রহণ করে, যা আপনাকে JSON আউটপুটের ফরম্যাট নিয়ন্ত্রণ করতে সাহায্য করে।
@JsonFormat প্যারামিটারসমূহ
| প্যারামিটার | বর্ণনা |
|---|---|
shape | আউটপুট ডেটার কাঠামো নির্ধারণ (যেমন: STRING, NUMBER) |
pattern | কাস্টম প্যাটার্ন নির্ধারণ (যেমন: yyyy-MM-dd) |
timezone | নির্দিষ্ট টাইমজোন প্রয়োগ (যেমন: UTC, Asia/Dhaka) |
locale | নির্দিষ্ট লোকেল (ভাষা এবং দেশ) প্রয়োগ করা |
Custom Date Format এবং Time Zone কনফিগার করার উদাহরণ
১. Date এবং Time Formatting
Date বা Time ফরম্যাট কাস্টমাইজ করতে @JsonFormat অ্যানোটেশন ব্যবহার করুন। ধরুন, আপনি JSON ডেটাতে তারিখ/সময় ফরম্যাট কাস্টমাইজ করতে চান:
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 HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
// Constructors
public Event(String name, Date eventDate) {
this.name = name;
this.eventDate = eventDate;
}
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getEventDate() {
return eventDate;
}
public void setEventDate(Date eventDate) {
this.eventDate = eventDate;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event("Meeting", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Meeting",
"eventDate": "2024-12-21 15:30:00"
}
এখানে, আমরা yyyy-MM-dd HH:mm:ss প্যাটার্ন ব্যবহার করেছি, এবং Asia/Dhaka টাইমজোনে সময় ফরম্যাট করেছি।
২. TimeZone এবং Locale কনফিগার করা
Jackson ব্যবহার করে TimeZone এবং Locale সেট করা খুবই সহজ। timezone এবং locale প্যারামিটার ব্যবহার করে তা কাস্টমাইজ করা যায়। নিচের উদাহরণটি দেখুন:
import com.fasterxml.jackson.annotation.JsonFormat;
public class EventWithTimeZone {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date eventDate;
// Constructors
public EventWithTimeZone(String name, Date eventDate) {
this.name = name;
this.eventDate = eventDate;
}
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getEventDate() {
return eventDate;
}
public void setEventDate(Date eventDate) {
this.eventDate = eventDate;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;
public class JsonFormatTimeZoneExample {
public static void main(String[] args) throws Exception {
EventWithTimeZone event = new EventWithTimeZone("Conference", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Conference",
"eventDate": "2024-12-21 10:30:00"
}
এখানে timezone = "UTC" ব্যবহার করা হয়েছে, তাই যেকোনো স্থানীয় সময়ের তুলনায় UTC টাইমজোন অনুযায়ী ডেটা সিরিয়ালাইজ হবে।
Spring Boot গ্লোবালি Date Format এবং Time Zone কনফিগার করা
Spring Boot প্রজেক্টে Jackson ব্যবহার করে গ্লোবালি Date format এবং TimeZone কনফিগার করার জন্য application.properties বা application.yml ব্যবহার করা যায়।
application.properties এ কনফিগারেশন:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Dhaka
এই কনফিগারেশনটির মাধ্যমে আপনার Spring Boot অ্যাপ্লিকেশন গ্লোবালি yyyy-MM-dd HH:mm:ss ফরম্যাট এবং Asia/Dhaka টাইমজোন ব্যবহার করবে।
Spring Configuration ক্লাস:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// Java 8 Date/Time API মডিউল নিবন্ধন
objectMapper.registerModule(new JavaTimeModule());
// টাইমজোন সেট করা
objectMapper.setTimeZone(java.util.TimeZone.getTimeZone("Asia/Dhaka"));
// ডেটা টাইম স্ট্যাম্প হিসেবে না লেখার জন্য
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return objectMapper;
}
}
এই কনফিগারেশনটির মাধ্যমে গ্লোবালি Asia/Dhaka টাইমজোন এবং yyyy-MM-dd HH:mm:ss ফরম্যাট নিশ্চিত করা যায়।
Spring Boot এ @JsonFormat ব্যবহার:
Spring Boot প্রকল্পে @JsonFormat অ্যানোটেশনটি নির্দিষ্ট ফিল্ডে টাইমজোন এবং ডেটা ফরম্যাট কাস্টমাইজ করতে ব্যবহার করতে পারেন।
@JsonFormat গ্লোবালি কনফিগার করা:
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 HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
// Getters and Setters
}
এখানে Asia/Dhaka টাইমজোনের সময় এবং yyyy-MM-dd HH:mm:ss প্যাটার্ন অনুযায়ী ডেটা সিরিয়ালাইজ করা হবে।
@JsonFormatব্যবহার করে আপনি JSON Serialization এবং Deserialization এর সময় তারিখ, সময়, এবং টাইমজোন কাস্টমাইজ করতে পারেন।- TimeZone এবং Date Format গ্লোবালি কনফিগার করা Spring Boot অ্যাপ্লিকেশনে সহজ এবং কার্যকরী।
@JsonFormatএবং Spring Boot Configuration ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের ডেটা ফরম্যাট এবং টাইমজোন নিয়ন্ত্রণ করতে পারবেন।@JsonFormatএpatternএবংtimezoneপ্যারামিটার ব্যবহার করে কাস্টম ডেটা ফরম্যাট তৈরি করা সহজ।
এটি Jackson এবং Spring Boot-এর মাধ্যমে তারিখ, সময় এবং টাইমজোন কাস্টমাইজেশনের একটি শক্তিশালী পদ্ধতি।
Jackson-এর @JsonFormat অ্যানোটেশন তারিখ, সময়, সংখ্যা এবং অন্যান্য ধরনের ডেটা ফরম্যাটিং কাস্টমাইজ করতে ব্যবহৃত হয়। এর সাহায্যে JSON ডেটার আউটপুট এবং ইনপুটের ফরম্যাট নিয়ন্ত্রণ করা যায়। এর ব্যবহার আরও বিস্তৃত এবং বিভিন্ন ধরনের কনফিগারেশন করা সম্ভব। চলুন, @JsonFormat এর কিছু অন্যান্য কৌশল নিয়ে আলোচনা করি।
1. @JsonFormat এর মাধ্যমে Date এবং Time Formatting
Jackson @JsonFormat অ্যানোটেশন দিয়ে তারিখ এবং সময় ফরম্যাট কাস্টমাইজ করা হয়। আপনি টাইমস্ট্যাম্প, yyyy-MM-dd ফরম্যাট, বা অন্য কোনো কাস্টম প্যাটার্ন ব্যবহার করতে পারেন।
Date/Time Formatting উদাহরণ:
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 HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Conference");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Conference",
"eventDate": "2024-12-21 15:30:00"
}
2. @JsonFormat এর মাধ্যমে Enum Customization
Jackson ব্যবহার করে Enum গুলোর কাস্টম ফরম্যাট তৈরি করা যায়। উদাহরণস্বরূপ, আপনি Enum এর নাম পরিবর্তন করতে পারেন বা একটি Enum value কে JSON হিসেবে একটি মানে রূপান্তর করতে পারেন।
Enum উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Status {
SUCCESS(1, "Operation Successful"),
FAILURE(0, "Operation Failed");
private final int code;
private final String message;
Status(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatEnumExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Status.SUCCESS);
System.out.println(json);
}
}
JSON Output:
{
"code": 1,
"message": "Operation Successful"
}
3. @JsonFormat এর মাধ্যমে Number Formatting
নম্বর ফরম্যাটিং কাস্টমাইজ করতে আপনি @JsonFormat এর pattern ব্যবহার করতে পারেন। এটি সংখ্যা, দশমিক স্থান, এবং কাস্টম ফরম্যাটে সংখ্যাকে JSON-এ রূপান্তর করতে সাহায্য করে।
Number Formatting উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Product {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "###,###.##")
private double price;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Product product = new Product();
product.setName("Laptop");
product.setPrice(123456.789);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output:
{
"name": "Laptop",
"price": "123,456.79"
}
4. @JsonFormat Shape নিয়ন্ত্রণ
Jackson-এর @JsonFormat এর shape প্যারামিটার দিয়ে আপনি JSON ফিল্ডের আউটপুটের আকার নিয়ন্ত্রণ করতে পারেন। এটি STRING, NUMBER, ARRAY, OBJECT, BOOLEAN ইত্যাদি শেপ নির্ধারণ করতে পারে।
@JsonFormat Shape উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.List;
public class Person {
private String name;
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
private List<String> hobbies;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
public class JsonFormatArrayExample {
public static void main(String[] args) throws Exception {
Person person = new Person();
person.setName("Rahim");
person.setHobbies(Arrays.asList("Reading", "Gaming", "Traveling"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
["Rahim",["Reading","Gaming","Traveling"]]
5. @JsonFormat TimeZone কাস্টমাইজেশন
আপনি @JsonFormat দিয়ে নির্দিষ্ট টাইমজোন সেট করতে পারেন, যাতে তারিখ/সময় সঠিক টাইমজোনে ফরম্যাট হয়।
TimeZone উদাহরণ:
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 HH:mm:ss", timezone = "UTC")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event();
event.setName("Global Conference");
event.setEventDate(new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Global Conference",
"eventDate": "2024-12-21 10:30:00"
}
6. @JsonFormat Locale কাস্টমাইজেশন
আপনি @JsonFormat ব্যবহার করে নির্দিষ্ট লোকেলও সেট করতে পারেন, যাতে সেই অঞ্চলের অনুযায়ী ফরম্যাটিং করা হয়।
Locale উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Price {
private double amount;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "###,###.##", locale = "fr_FR")
private double price;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Price product = new Price();
product.setPrice(123456.789);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output (French Locale):
{
"price": "123 456,79"
}
@JsonFormatঅ্যানোটেশন Jackson ব্যবহার করে Date, Time, Enum, Numbers, এবং Collections ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়।- TimeZone এবং Locale সেট করার মাধ্যমে, আপনার JSON ডেটা সঠিকভাবে localization এবং internationalization নিশ্চিত করা সম্ভব।
- Shape প্যারামিটার ব্যবহার করে আপনি ডেটার আউটপুট শেপ কাস্টমাইজ করতে পারেন।
@JsonFormatঅ্যানোটেশন JSON-এর ডেটা ফরম্যাটিং আরও নির্ভুল, সুবিধাজনক, এবং ইউজার-বান্ধব করে তোলে।
@JsonFormat Jackson-এর একটি গুরুত্বপূর্ণ অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় ডেটার ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়। এটি বিশেষ করে তারিখ, সময় এবং সংখ্যা সংক্রান্ত ডেটার জন্য ব্যবহার করা হয়।
এখানে আমরা বিভিন্ন ধরনের Date, Time, এবং Number ফরম্যাট কাস্টমাইজ করার জন্য @JsonFormat এর ব্যবহার দেখব।
1. Date এবং Time ফরম্যাটিং
@JsonFormat ব্যবহার করে তারিখ এবং সময়ের ফরম্যাট কাস্টমাইজ করা হয়।
কোড উদাহরণ:
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 HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
public Event(String name, Date eventDate) {
this.name = name;
this.eventDate = eventDate;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event("Meeting", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Meeting",
"eventDate": "2024-12-21 15:30:00"
}
Explanation:
pattern = "yyyy-MM-dd HH:mm:ss": তারিখ এবং সময়ের ফরম্যাট নির্ধারণ করেছে।timezone = "Asia/Dhaka": টাইমজোন কনফিগার করা হয়েছে, যাতে সময়ে স্থানীয় সময় ব্যবহার করা হয়।
2. Number Formatting
@JsonFormat ব্যবহার করে সংখ্যা (যেমন: টাকা বা বড় সংখ্যার ফরম্যাটিং) কাস্টমাইজ করা যায়।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Product {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#,###.00")
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class ProductExample {
public static void main(String[] args) throws Exception {
Product product = new Product("Laptop", 123456.789);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output:
{
"name": "Laptop",
"price": "123,456.79"
}
Explanation:
pattern = "#,###.00": সংখ্যার ফরম্যাটিং করা হয়েছে, যাতে কমা দিয়ে হাজারের সংখ্যা বিভক্ত হয় এবং দুইটি দশমিক সংখ্যা থাকে।
3. Enum Formatting
@JsonFormat ব্যবহার করে Enum এর Serialization কাস্টমাইজ করা যেতে পারে।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Status {
SUCCESS(1, "Operation Successful"),
FAILURE(0, "Operation Failed");
private final int code;
private final String message;
Status(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class EnumExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Status.SUCCESS);
System.out.println(json);
}
}
JSON Output:
{
"code": 1,
"message": "Operation Successful"
}
Explanation:
@JsonFormat(shape = JsonFormat.Shape.OBJECT): Enum কে Object হিসেবে Serialize করার জন্য।
4. List বা Array Formatting
@JsonFormat ব্যবহার করে List বা Array-র আউটপুট কাস্টমাইজ করা যায়।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.List;
public class Person {
private String name;
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
private List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
public class PersonExample {
public static void main(String[] args) throws Exception {
Person person = new Person("Rahim", Arrays.asList("Reading", "Gaming", "Traveling"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
["Rahim",["Reading","Gaming","Traveling"]]
Explanation:
@JsonFormat(shape = JsonFormat.Shape.ARRAY): এই ফরম্যাট ব্যবহার করেPersonক্লাসের Object কে JSON Array হিসেবে রূপান্তরিত করা হয়েছে।
5. Handling TimeZone in Date Formats
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class EventTimeZoneExample {
public static void main(String[] args) throws Exception {
Event event = new Event("Global Event", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Global Event",
"eventDate": "2024-12-21 12:00:00"
}
Explanation:
timezone = "UTC": ইউটিসি টাইমজোনে তারিখ এবং সময় ফরম্যাট করা হয়েছে।
@JsonFormatএকটি শক্তিশালী অ্যানোটেশন যা Jackson-এ বিভিন্ন ডেটা ফরম্যাট কাস্টমাইজ করার জন্য ব্যবহৃত হয়, বিশেষত তারিখ, সময় এবং সংখ্যা ফরম্যাটিং-এর জন্য।- এটি Serialization এবং Deserialization উভয়ের সময় ফরম্যাট কাস্টমাইজেশন করতে সহায়তা করে, যেমন টাইমজোন, প্যাটার্ন, আকার (shape) ইত্যাদি।
- JSON API-তে এক্সটার্নাল ডেটা রূপান্তর এবং অন্যান্য বৈশিষ্ট্যগুলির জন্য
@JsonFormatগুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more