ackson Annotations এবং Spring Integration গাইড ও নোট

Java Technologies - জ্যাকসন অ্যানোটেশন (Jackson Annotations)
268

Jackson অ্যানোটেশনগুলি JSON Serialization এবং Deserialization কাস্টমাইজ করার জন্য ব্যবহৃত হয়, এবং Spring Framework-এর সাথে একত্রে ব্যবহার করলে এটি REST API এবং ডেটাবেস থেকে ডেটা প্রক্রিয়া করার জন্য অত্যন্ত কার্যকরী হয়ে ওঠে। Jackson Spring এর মধ্যে একত্রিত হওয়া অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি Spring Boot এবং Spring MVC-তে JSON ডেটা প্রক্রিয়াকরণকে সোজা করে তোলে।

Spring-এ Jackson Integration সাধারণত RESTful APIs এবং Web Services এ ডেটা ট্রান্সফারের জন্য ব্যবহৃত হয়। Jackson Spring-এ খুবই জনপ্রিয়, বিশেষত ObjectMapper এবং Jackson Annotations ব্যবহারের মাধ্যমে JSON ডেটার ফিল্ড ফিল্টারিং, ফরম্যাটিং এবং কাস্টম লজিক প্রয়োগ করা সম্ভব।


Spring Framework এ Jackson Integration

Spring Framework Jackson-কে Jackson2ObjectMapperBuilder এর মাধ্যমে অটোমেটিকালি ইন্টিগ্রেট করে, যার ফলে Spring Bean হিসেবে Jackson কনফিগার করা হয় এবং এর বিভিন্ন অ্যানোটেশন সরাসরি কাজ করতে থাকে। Jackson অ্যানোটেশনগুলি যেমন @JsonProperty, @JsonFormat, @JsonIgnore ইত্যাদি Spring Controller বা REST API-তে ব্যবহৃত হয়।


Spring Boot এবং Jackson Integration:

Spring Boot এর মাধ্যমে Jackson Integration অত্যন্ত সহজ, এবং Spring Boot ডিফল্টভাবেই Jackson কে ObjectMapper এর মাধ্যমে JSON Serialization এবং Deserialization-এ ব্যবহার করে।

Spring Boot Configuration with Jackson:

Spring Boot এর ডিফল্ট Jackson ObjectMapper কনফিগারেশনের জন্য application.properties অথবা application.yml ব্যবহার করা যায়।

application.properties Example:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=UTC
application.yml Example:
spring:
  jackson:
    date-format: "yyyy-MM-dd HH:mm:ss"
    time-zone: UTC

এই কনফিগারেশন Spring Boot অ্যাপ্লিকেশনে Jackson-এর কাস্টম ডেটা ফরম্যাট এবং টাইমজোন সেট করবে।


Spring Controller Example with Jackson Annotations

Model Class with Jackson Annotations:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Date;

public class User {

    @JsonProperty("user_id")  // Custom field name
    private int id;

    @JsonProperty("user_name")  // Custom field name
    private String name;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")  // Custom Date Format
    private Date birthDate;

    // Constructors, Getters and Setters
    public User(int id, String name, Date birthDate) {
        this.id = id;
        this.name = name;
        this.birthDate = birthDate;
    }

    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 Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
}

Spring Controller Example:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

@RestController
public class UserController {

    @GetMapping("/users")
    public List<User> getUsers() {
        User user1 = new User(1, "John Doe", new Date());
        User user2 = new User(2, "Jane Doe", new Date());
        return Arrays.asList(user1, user2);
    }
}

Spring Boot Application Class:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JacksonSpringApplication {
    public static void main(String[] args) {
        SpringApplication.run(JacksonSpringApplication.class, args);
    }
}
JSON Output from /users endpoint:
[
  {
    "user_id": 1,
    "user_name": "John Doe",
    "birthDate": "2024-12-21"
  },
  {
    "user_id": 2,
    "user_name": "Jane Doe",
    "birthDate": "2024-12-21"
  }
]

Jackson Annotations Explanation in Spring:

  1. @JsonProperty:
    • JSON ফিল্ডের নাম কাস্টমাইজ করতে ব্যবহৃত হয়। উপরের উদাহরণে, "user_id" এবং "user_name" ব্যবহার করা হয়েছে id এবং name প্রপার্টির জন্য।
  2. @JsonFormat:
    • ডেটা ফরম্যাট নির্ধারণ করে। এখানে birthDate এর জন্য কাস্টম তারিখ ফরম্যাট "yyyy-MM-dd" সেট করা হয়েছে।

Spring Boot এবং Jackson Configuration:

Spring Boot এ Jackson কনফিগারেশন খুবই সহজ। Jackson2ObjectMapperBuilder ব্যবহার করে Jackson কাস্টম কনফিগারেশন করা যায়।

Custom ObjectMapper Configuration Example:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().build();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);  // Enable pretty-printing
        return objectMapper;
    }
}
  • এই কনফিগারেশনে Jackson এর pretty-printing সক্রিয় করা হয়েছে, যাতে JSON আউটপুট সুন্দরভাবে প্রদর্শিত হয়।

Spring Boot + Jackson + Custom Serialization Example:

Custom Serializer Example:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomDateSerializer extends JsonSerializer<Date> {
    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = formatter.format(value);
        gen.writeString(formattedDate);
    }
}

Model Class with Custom Serializer:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class User {
    private String name;

    @JsonSerialize(using = CustomDateSerializer.class)  // Custom serializer applied here
    private Date birthDate;

    // Constructors, Getters and Setters
    public User(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
}

Spring Integration Benefits:

  1. Effortless Integration:
    • Spring Boot ডিফল্টভাবে Jackson ব্যবহার করে এবং কাস্টম অ্যানোটেশন ও কনফিগারেশন সহজে কাজ করে।
  2. Automatic JSON Handling:
    • Spring MVC-এর @RestController ব্যবহার করে সহজেই JSON প্রক্রিয়া করা যায়।
  3. Advanced Data Handling:
    • Jackson অ্যানোটেশন ব্যবহার করে API responses এবং requests কাস্টমাইজ করা যায়, যা সিস্টেমের প্রয়োজন অনুযায়ী ডেটা নিয়ন্ত্রণ করতে সাহায্য করে।
  4. Serialization/Deserialization Customization:
    • Jackson অ্যানোটেশনগুলি JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করার জন্য শক্তিশালী সরঞ্জাম প্রদান করে, যেমন @JsonFormat, @JsonProperty, @JsonIgnore, ইত্যাদি।
  • Jackson অ্যানোটেশনগুলি Spring Integration এর জন্য খুবই উপকারী। Spring Boot এবং Spring MVC এর মাধ্যমে Jackson-এর সঠিক কনফিগারেশন এবং কাস্টম অ্যানোটেশনগুলি API ডেভেলপমেন্ট আরও সহজ এবং কার্যকরী করে।
  • Jackson অ্যানোটেশন যেমন @JsonProperty, @JsonFormat, @JsonIgnore, ইত্যাদি ব্যবহার করে JSON ডেটার কাস্টমাইজেশন এবং সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন কার্যকরীভাবে করা সম্ভব।
  • Spring Boot-এ Jackson অ্যানোটেশনস ব্যবহার করার মাধ্যমে আপনি RESTful API গুলোর JSON ডেটা প্রসেসিংকে সহজে কাস্টমাইজ এবং নিয়ন্ত্রণ করতে পারবেন।
Content added || updated By

Jackson Annotations এবং Spring Framework এর ইন্টিগ্রেশন

245

Jackson এবং Spring Framework একত্রে কাজ করতে পারলে JSON ডেটা প্রক্রিয়াকরণ আরও সহজ এবং দ্রুত হয়ে ওঠে। Jackson-এর অ্যানোটেশনগুলি Spring-এর RESTful API ডেভেলপমেন্ট এবং data binding এর জন্য অত্যন্ত কার্যকর। Spring Boot, Spring MVC, এবং Spring Data REST এর মতো Spring-এর বিভিন্ন অংশের সঙ্গে Jackson এর ইন্টিগ্রেশন আপনার অ্যাপ্লিকেশন ডেভেলপমেন্টকে সহজ করে।

Spring-এ Jackson অ্যানোটেশন ব্যবহার করার মাধ্যমে আপনি JSON ফিল্ড কাস্টমাইজেশন, serialization/deserialization এবং অন্যান্য প্রয়োজনীয় কনফিগারেশনগুলো পরিচালনা করতে পারেন।


Spring Framework এবং Jackson এর ইন্টিগ্রেশন

Spring-এ Jackson-এর বিভিন্ন সুবিধা এবং কাস্টম অ্যানোটেশন ব্যবহারের জন্য ObjectMapper ব্যবহৃত হয়, যা Spring MVC, Spring Boot, এবং Spring Data REST এর মাধ্যমে JSON ডেটাকে প্রক্রিয়া করে। Jackson অ্যানোটেশনগুলি Spring Framework-এর REST API সেবা এবং JSON ডেটা ফরম্যাট কাস্টমাইজ করতে সহায়তা করে।

1. Jackson এবং Spring Boot এর ইন্টিগ্রেশন

Spring Boot প্রকল্পে Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে। এটি Spring Boot অ্যাপ্লিকেশন এর JSON ডেটা প্রক্রিয়াকরণের জন্য স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়।

Spring Boot Configuration for Jackson:

# application.properties বা application.yml ফাইলের মাধ্যমে Jackson কনফিগারেশন
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Dhaka
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false

এখানে date-format, time-zone এবং WRITE_DATES_AS_TIMESTAMPS কনফিগারেশন দিয়ে Jackson-এর তারিখ ও সময় ফরম্যাট কাস্টমাইজ করা হয়েছে।

Spring Boot Controller এর মধ্যে Jackson Annotations এর ব্যবহার:

Spring Boot-এ Jackson অ্যানোটেশনগুলি খুবই সাধারণভাবে কাজ করে, এবং আপনি এই অ্যানোটেশনগুলি Controller বা Model ক্লাসে ব্যবহার করতে পারেন।

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("user_id")
    private int id;

    @JsonProperty("user_name")
    private String name;

    // Getters and Setters
}

এখানে, @JsonProperty ব্যবহার করে ফিল্ড নাম কাস্টমাইজ করা হয়েছে যাতে JSON ফরম্যাটে user_id এবং user_name নামের ফিল্ড দেখানো হয়।


2. Spring MVC (RestController) এবং Jackson

Spring MVC-তে Jackson অ্যানোটেশন ব্যবহার করে আপনি @RestController বা @RequestBody, @ResponseBody সহ JSON ডেটা প্রক্রিয়াকরণের জন্য অ্যানোটেশন ব্যবহার করতে পারেন।

@RequestBody এবং @ResponseBody অ্যানোটেশনগুলি Spring-এ Jackson ব্যবহার করে JSON ডেটাকে পার্স করতে এবং রিটার্ন করতে সাহায্য করে।

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping
    public User getUser() {
        User user = new User();
        user.setId(1);
        user.setName("Rahim");
        return user;
    }
}

এখানে User ক্লাসটি Jackson অ্যানোটেশন ব্যবহার করে JSON আউটপুট তৈরি করবে। Spring RestController স্বয়ংক্রিয়ভাবে @ResponseBody ব্যবহারের মাধ্যমে JSON রিটার্ন করবে।

Output (JSON response):

{
  "user_id": 1,
  "user_name": "Rahim"
}

3. Jackson Annotations এবং Spring Boot Customization

Spring Boot-এ Jackson-এর মাধ্যমে কাস্টমাইজেশনের জন্য @JsonFormat, @JsonAlias, @JsonIgnoreProperties এবং অন্যান্য অ্যানোটেশন ব্যবহার করা হয়।

Custom Date Format:
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
}
Spring Boot Configuration Example:
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm:ss

এই কনফিগারেশনটি Spring Boot অ্যাপ্লিকেশনে Jackson এর জন্য ISO 8601 তারিখ ফরম্যাটে JSON রিটার্ন করবে।


4. Jackson Annotations এবং Spring Data REST

Spring Data REST ব্যবহার করার সময় Jackson অ্যানোটেশনগুলির সাহায্যে আপনি JSON ডেটার কাস্টমাইজেশন করতে পারেন।

Spring Data REST অ্যাপ্লিকেশন তৈরি করার সময় Jackson এর মাধ্যমে Entity Serialization এবং Deserialization সঠিকভাবে কাস্টমাইজ করতে পারেন।

import org.springframework.data.rest.core.annotation.RestResource;

@Entity
public class Product {

    @Id
    private Long id;

    @JsonProperty("product_name")
    private String name;

    @JsonProperty("product_price")
    private double price;

    // Getters and Setters
}

এখানে @JsonProperty ব্যবহার করা হয়েছে, যাতে JSON আউটপুটে product_name এবং product_price নামের ফিল্ড দেখানো হয়। Spring Data REST এই Entity ক্লাসের জন্য নিজেই REST API তৈরি করবে, এবং JSON ফরম্যাট সঠিকভাবে কাস্টমাইজ হবে।


5. Jackson Annotations এবং Spring Security

Spring Security ব্যবহার করার সময় Jackson অ্যানোটেশন ব্যবহার করে আপনি JSON প্রোপার্টি ফিল্টার করতে পারেন, যাতে সুরক্ষা সংক্রান্ত তথ্য (যেমন পাসওয়ার্ড) সরাসরি JSON রেসপন্সে প্রকাশ না পায়।

import com.fasterxml.jackson.annotation.JsonIgnore;

public class User {
    private int id;
    private String username;

    @JsonIgnore
    private String password;

    // Getters and Setters
}

এখানে, @JsonIgnore অ্যানোটেশন ব্যবহার করা হয়েছে যাতে password ফিল্ড JSON আউটপুটে না আসে।


6. Spring Boot Custom ObjectMapper Configuration

Spring Boot-এ Jackson এর কাস্টম কনফিগারেশন করার জন্য আপনি ObjectMapper কাস্টমাইজ করতে পারেন। Spring Boot একটি স্বয়ংক্রিয় ObjectMapper কনফিগারেশন প্রদান করে, তবে আপনি আপনার প্রয়োজন অনুসারে এটি কাস্টমাইজ করতে পারেন।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT);  // Pretty Print JSON
        return objectMapper;
    }
}

এই কনফিগারেশনটি JSON আউটপুটকে pretty print ফরম্যাটে কনভার্ট করবে।


  • Jackson এবং Spring Framework এর ইন্টিগ্রেশন JSON ডেটা প্রসেসিংকে অনেক সহজ এবং কাস্টমাইজড করে তোলে।
  • Jackson Annotations (যেমন: @JsonProperty, @JsonFormat, @JsonIgnore, @JsonAlias, @JsonFilter ইত্যাদি) Spring-এ JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করতে সাহায্য করে।
  • Spring Boot স্বয়ংক্রিয়ভাবে Jackson কনফিগারেশন হ্যান্ডেল করে, তবে আপনি প্রয়োজন অনুসারে কাস্টম ObjectMapper এবং অন্যান্য Jackson অ্যানোটেশন ব্যবহার করে আরও উন্নত কাস্টমাইজেশন করতে পারেন।
  • Spring Data REST এবং Spring Security এর মতো Spring-এর বিভিন্ন অংশের সঙ্গে Jackson এর সঠিক ব্যবহারের মাধ্যমে আপনি API ডেভেলপমেন্টের জন্য আরো নিরাপদ এবং কার্যকর JSON ডেটা তৈরি করতে পারবেন।
Content added By

@RestController এবং Jackson এর মাধ্যমে JSON Response Handling

295

@RestController হল Spring Framework-এর একটি অ্যানোটেশন যা বিশেষভাবে RESTful Web Services তৈরি করতে ব্যবহৃত হয়। এটি @Controller এবং @ResponseBody এর সমন্বয়ে তৈরি, যার মাধ্যমে Spring আপনাকে JSON বা XML ফরম্যাটে ডেটা রিটার্ন করতে সক্ষম করে। Jackson স্বয়ংক্রিয়ভাবে JSON Response Handling করতে সাহায্য করে, এবং Spring Boot এর সাথে এর ইন্টিগ্রেশন খুবই সহজ।

এই প্রক্রিয়াতে, @RestController ব্যবহার করে আপনার অ্যাপ্লিকেশনকে REST API হিসেবে কনফিগার করতে পারেন, এবং Jackson স্বয়ংক্রিয়ভাবে Java Objects কে JSON ফরম্যাটে রূপান্তর করে।


@RestController এবং JSON Response Handling

1. @RestController এর ব্যবহার

@RestController Spring MVC এর একটি বিশেষ অ্যানোটেশন যা REST API তৈরি করতে ব্যবহৃত হয়। এটি ক্লাসকে RESTful Web Service Controller হিসেবে চিহ্নিত করে, যেখানে ক্লাসের প্রতিটি মেথড স্বয়ংক্রিয়ভাবে HTTP Response হিসেবে JSON বা XML ফরম্যাটে ডেটা রিটার্ন করে। @ResponseBody অ্যানোটেশনটির ব্যবহার এখানে অন্তর্ভুক্ত থাকে, যার মাধ্যমে মেথডের রিটার্ন ভ্যালু সরাসরি HTTP Response Body তে চলে আসে।

Java Class Example with @RestController:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User(1, "Rahim", "rahim@example.com");
    }
}

User Class Example:

public class User {
    private int id;
    private String name;
    private String email;

    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 Response Handling

Spring Boot Application Setup:

Spring Boot নিজেই Jackson এর সাথে ইন্টিগ্রেটেড থাকে, যার মাধ্যমে Java objects স্বয়ংক্রিয়ভাবে JSON ফরম্যাটে রূপান্তরিত হয়। আপনি @RestControllerGET মেথড তৈরি করে যখন JSON রেসপন্স ফেরত দেবেন, তখন Jackson আপনার User অবজেক্টকে JSON ফরম্যাটে রূপান্তর করবে।

JSON Response Example:

মনে করুন আপনি /user URL এ একটি GET রিকোয়েস্ট পাঠাচ্ছেন। Spring Boot এবং Jackson স্বয়ংক্রিয়ভাবে User অবজেক্টকে JSON রেসপন্সে রূপান্তর করবে।

{
  "id": 1,
  "name": "Rahim",
  "email": "rahim@example.com"
}

@JsonFormat এবং JSON Response Formatting

Jackson-এ আপনি @JsonFormat অ্যানোটেশন ব্যবহার করে Date বা Time ফরম্যাটিং কাস্টমাইজ করতে পারেন, যাতে JSON রেসপন্সে টাইম বা ডেটা ফরম্যাট নির্দিষ্টভাবে আসে।

Java Class with @JsonFormat:

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 = "Asia/Kolkata")
    private Date eventDate;

    public Event(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }

    // Getters and Setters
}

@RestController এর সাথে @JsonFormat Example:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
public class EventController {

    @GetMapping("/event")
    public Event getEvent() {
        return new Event("Workshop", new Date());
    }
}

JSON Output with Date:

{
  "name": "Workshop",
  "eventDate": "2024-12-21 14:30:00"
}

এখানে, @JsonFormat ব্যবহার করা হয়েছে, যাতে eventDate ফিল্ডের তারিখ এবং সময় yyyy-MM-dd HH:mm:ss ফরম্যাটে প্রদর্শিত হয়।


Spring Boot Configuration for Jackson

Spring Boot-এর মধ্যে Jackson ডিফল্টভাবে কনফিগার করা থাকে, তবে আপনি application.properties বা application.yml ফাইলের মাধ্যমে Jackson এর কনফিগারেশন পরিবর্তন করতে পারেন।

Example: Customizing JSON Formatting

# application.properties file
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Kolkata

application.yml Example:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Kolkata

এভাবে আপনি Spring Boot অ্যাপ্লিকেশনে Jackson এর JSON রেসপন্স কাস্টমাইজ করতে পারেন।


@JsonProperty এবং JSON Response Handling

Jackson এর @JsonProperty অ্যানোটেশন ব্যবহার করে আপনি ফিল্ড নাম কাস্টমাইজ করতে পারেন, যাতে আপনার JSON রেসপন্সে ফিল্ড নামগুলি আপনার চাহিদা অনুযায়ী হয়।

Example:

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("user_id")
    private int id;

    @JsonProperty("user_name")
    private String name;

    private String email;

    // Getters and Setters
}

JSON Output:

{
  "user_id": 1,
  "user_name": "Rahim",
  "email": "rahim@example.com"
}

@JsonIgnore এবং JSON Response Handling

@JsonIgnore অ্যানোটেশন ব্যবহার করে আপনি JSON রেসপন্স থেকে নির্দিষ্ট ফিল্ড বাদ দিতে পারেন।

Example:

import com.fasterxml.jackson.annotation.JsonIgnore;

public class User {
    private int id;
    private String name;

    @JsonIgnore
    private String password;

    // Getters and Setters
}

JSON Output (Password field excluded):

{
  "id": 1,
  "name": "Rahim"
}

এখানে, password ফিল্ড @JsonIgnore দ্বারা বাদ দেওয়া হয়েছে, এবং JSON রেসপন্সে এটি প্রদর্শিত হয়নি।


  1. @RestController অ্যানোটেশন Spring Boot-এ RESTful API তৈরি করতে ব্যবহৃত হয়, এবং Jackson স্বয়ংক্রিয়ভাবে Java Object কে JSON ফরম্যাটে রূপান্তর করে।
  2. Jackson এর মাধ্যমে আপনি JSON রেসপন্স ফরম্যাট কাস্টমাইজ করতে পারেন, যেমন @JsonFormat, @JsonProperty, এবং @JsonIgnore ব্যবহার করে।
  3. Spring Boot Configuration দিয়ে আপনি Jackson এর কনফিগারেশন সহজেই নিয়ন্ত্রণ করতে পারেন (যেমন তারিখ এবং টাইমজোন ফরম্যাটিং)।
  4. Jackson এর মাধ্যমে আপনি JSON রেসপন্সকে আরও কাস্টমাইজড, নিয়ন্ত্রিত এবং নিরাপদ করতে পারেন।

Jackson এবং Spring Boot এর সাহায্যে JSON Response Handling একেবারে সহজ এবং শক্তিশালী, যা RESTful APIs-কে আরও নমনীয় এবং ব্যবস্থাপনাযোগ্য করে তোলে।

Content added By

Spring Boot এর সাথে Jackson ব্যবহার

314

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, @JsonIgnoreProperties Spring Boot অ্যাপ্লিকেশনগুলিতে JSON ডেটার কাস্টমাইজেশন এবং নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
  • Spring Boot এ Jackson কনফিগারেশন এবং অ্যানোটেশন ব্যবহার করে JSON ফরম্যাটে প্রয়োজনীয় পরিবর্তন করতে সহজে কাস্টম লজিক প্রয়োগ করা যায়।
  • Jackson কাস্টম Serializer এবং Deserializer তৈরি করে আরো উন্নত JSON প্রক্রিয়া সম্ভব।
Content added By

Practical উদাহরণ সহ Spring Integration

293

Spring Framework-এ Jackson অ্যানোটেশন ব্যবহার করার মাধ্যমে JSON ডেটা Serialization এবং Deserialization কাস্টমাইজ করা যায়। Spring Boot এ Jackson ডিফল্টভাবে ব্যবহার করা হয়, বিশেষ করে REST APIs-এ JSON ডেটা আদান-প্রদানের জন্য।

Spring-এ Jackson অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি JSON আউটপুট বা ইনপুট ফিল্ডগুলোর নাম কাস্টমাইজ, বিশেষ ধরনের ফিল্ড সিরিয়ালাইজ/ডেসিরিয়ালাইজ করতে পারেন, এবং অন্য অনেক কাস্টমাইজেশন করতে পারেন।

এখানে Spring Integration সহ Jackson অ্যানোটেশন ব্যবহারের Practical উদাহরণ দেখানো হবে।


প্রকল্পের সেটআপ:

Spring Boot Application তৈরি করে Jackson অ্যানোটেশন ব্যবহার করা হবে। প্রথমে আপনাকে Spring Boot project তৈরি করতে হবে এবং spring-boot-starter-web ডিপেনডেন্সি যোগ করতে হবে। Jackson ডিফল্টভাবে Spring Boot এর সাথে অন্তর্ভুক্ত থাকে।

pom.xml-এ Jackson ডিপেনডেন্সি:

<dependencies>
    <!-- Spring Boot Web Starter (includes Jackson) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

1. Custom Annotations সহ Spring Controller

এখানে আমরা একটি REST Controller তৈরি করব যেখানে Jackson Annotations ব্যবহৃত হবে।

Model Class (DTO) - Employee

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Employee {

    @JsonProperty("employee_id")  // JSON এর ফিল্ড নাম কাস্টমাইজ
    private int id;

    @JsonProperty("employee_name")  // JSON এর ফিল্ড নাম কাস্টমাইজ
    private String name;

    @JsonFormat(pattern = "yyyy-MM-dd")  // Date ফরম্যাট কাস্টমাইজ
    private String joinDate;

    // Constructors, Getters, and Setters
    public Employee(int id, String name, String joinDate) {
        this.id = id;
        this.name = name;
        this.joinDate = joinDate;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getJoinDate() {
        return joinDate;
    }
}

এখানে, @JsonProperty অ্যানোটেশনটি JSON আউটপুটের ফিল্ড নাম কাস্টমাইজ করার জন্য ব্যবহৃত হয়েছে, এবং @JsonFormat অ্যানোটেশনটি তারিখের ফরম্যাট নির্ধারণ করে।


Spring REST Controller - EmployeeController

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class EmployeeController {

    @GetMapping("/employees")
    public List<Employee> getEmployees() {
        Employee emp1 = new Employee(1, "Rahim", "2024-01-01");
        Employee emp2 = new Employee(2, "Karim", "2023-08-15");
        return Arrays.asList(emp1, emp2);
    }
}

এখানে, @RestController Spring-এ RESTful APIs তৈরি করার জন্য ব্যবহৃত হয়। /employees endpoint এ দুটি Employee অবজেক্ট রিটার্ন করা হচ্ছে।


2. Spring Configuration File

Spring Boot সিস্টেমে Jackson ডিফল্ট কনফিগারেশন হিসেবে যুক্ত থাকে। আপনি যদি JSON ডেটা ফরম্যাট কাস্টমাইজ করতে চান তবে ObjectMapper কনফিগার করতে পারেন।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // Disable WRITE_DATES_AS_TIMESTAMPS to make sure dates are in string format
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        return objectMapper;
    }
}

এখানে WRITE_DATES_AS_TIMESTAMPS ফিচারটি বন্ধ করা হয়েছে, যাতে Jackson তারিখকে Unix টাইমস্ট্যাম্প হিসেবে না, বরং ISO 8601 ফরম্যাটে JSON হিসেবে serialize করে।


3. Spring Boot Application Class

Spring Boot অ্যাপ্লিকেশন চালানোর জন্য মূল @SpringBootApplication ক্লাসটি থাকবে।

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JacksonAnnotationApplication {

    public static void main(String[] args) {
        SpringApplication.run(JacksonAnnotationApplication.class, args);
    }
}

4. JSON Response Example

যখন আপনি GET /employees endpoint এ কল করবেন, তখন এটি একটি JSON রেসপন্স রিটার্ন করবে যা Jackson Annotations এর মাধ্যমে কাস্টমাইজ করা হয়েছে।

Sample JSON Output:

[
  {
    "employee_id": 1,
    "employee_name": "Rahim",
    "joinDate": "2024-01-01"
  },
  {
    "employee_id": 2,
    "employee_name": "Karim",
    "joinDate": "2023-08-15"
  }
]

এখানে:

  • employee_id এবং employee_name কাস্টম নাম দিয়ে JSON-এ আউটপুট এসেছে, যা @JsonProperty অ্যানোটেশন দিয়ে নির্ধারণ করা হয়েছে।
  • joinDate ফিল্ডটি yyyy-MM-dd ফরম্যাটে সিরিয়ালাইজ হয়েছে, যা @JsonFormat অ্যানোটেশন দিয়ে কাস্টমাইজ করা হয়েছে।

5. JSON Request Example (Deserialization)

যখন আপনি JSON ইনপুট পাঠাবেন, Jackson স্বয়ংক্রিয়ভাবে সেই JSON ডেটাকে Java অবজেক্টে ডেসিরিয়ালাইজ করে নিবে।

Sample JSON Input:

{
  "employee_id": 3,
  "employee_name": "John",
  "joinDate": "2022-07-19"
}

Spring Controller for Deserialization:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmployeeController {

    @PostMapping("/employee")
    public String createEmployee(@RequestBody Employee employee) {
        return "Employee Created: " + employee.getName();
    }
}

এখানে, @RequestBody অ্যানোটেশন ব্যবহার করে JSON ডেটা Employee অবজেক্টে ডেসিরিয়ালাইজ করা হচ্ছে। আপনি JSON ইনপুট পাঠালে, Spring Jackson অ্যানোটেশন ব্যবহার করে সেই ডেটাকে অবজেক্টে রূপান্তর করবে।


  • Jackson অ্যানোটেশন Spring Boot-এ JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করার জন্য খুবই কার্যকর।
  • @JsonProperty, @JsonFormat, এবং অন্যান্য Jackson অ্যানোটেশন ব্যবহার করে ফিল্ডের নাম, তারিখ/সময় ফরম্যাট, এবং অন্যান্য কাস্টম লজিক নিয়ন্ত্রণ করা সম্ভব।
  • Spring Boot অ্যাপ্লিকেশন এর মধ্যে Jackson ডিফল্টভাবে অন্তর্ভুক্ত থাকে, এবং ObjectMapper কনফিগারেশন এর মাধ্যমে আরও উন্নত কাস্টমাইজেশন করা যায়।

এই উদাহরণটি দেখিয়ে দেওয়া হল কিভাবে Jackson অ্যানোটেশন Spring Framework এর মধ্যে JSON ফরম্যাটে কাজ করার সময় ব্যবহার করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...