Spring Boot এবং Jackson এর মাধ্যমে API Development

Java Technologies - জ্যাকসন (Jackson) - Jackson এবং Spring Boot Integration
206

Spring Boot এবং Jackson একত্রে ব্যবহার করে RESTful API তৈরি করা অত্যন্ত সহজ এবং কার্যকর। Spring Boot ডিফল্টভাবে Jackson-কে JSON serialization এবং deserialization-এর জন্য ব্যবহার করে। নিচে Spring Boot এবং Jackson ব্যবহার করে API ডেভেলপমেন্টের ধাপগুলো আলোচনা করা হলো।


Spring Boot এবং Jackson: ইন্টিগ্রেশন ও ডিপেনডেন্সি

Spring Boot ডিফল্টভাবে Jackson-এর উপর নির্ভর করে JSON ডেটা প্রসেসিং পরিচালনা করে। Maven ব্যবহার করলে, নিচের ডিপেনডেন্সি যুক্ত করুন:

Maven ডিপেনডেন্সি:

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

    <!-- Spring Boot Starter Validation -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
</dependencies>

Step 1: একটি Simple REST Controller তৈরি করুন

1. ডেটা মডেল তৈরি করুন

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

public class Product {
    private int id;

    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 100, message = "Name must be between 2 and 100 characters")
    private String name;

    @NotNull(message = "Price cannot be null")
    private Double price;

    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

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

    public Double getPrice() { return price; }
    public void setPrice(Double price) { this.price = price; }
}

2. REST Controller তৈরি করুন

import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    private final List<Product> products = new ArrayList<>();

    // Get All Products
    @GetMapping
    public ResponseEntity<List<Product>> getAllProducts() {
        return ResponseEntity.ok(products);
    }

    // Add a New Product
    @PostMapping
    public ResponseEntity<Product> addProduct(@Validated @RequestBody Product product) {
        product.setId(products.size() + 1);
        products.add(product);
        return ResponseEntity.ok(product);
    }

    // Get Product by ID
    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable int id) {
        return products.stream()
                .filter(product -> product.getId() == id)
                .findFirst()
                .map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }
}

Step 2: JSON Serialization এবং Deserialization

Spring Boot ডিফল্টভাবে Jackson ব্যবহার করে @RequestBody এবং @ResponseBody এর মাধ্যমে JSON ডেটা serialize এবং deserialize করে।


Step 3: Advanced Jackson Customization

1. @JsonProperty ব্যবহার করে কাস্টম ফিল্ড নাম

import com.fasterxml.jackson.annotation.JsonProperty;

public class Product {
    private int id;

    @JsonProperty("product_name")
    private String name;

    private Double price;

    // Getters and Setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

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

    public Double getPrice() { return price; }
    public void setPrice(Double price) { this.price = price; }
}

2. @JsonIgnore দিয়ে ফিল্ড বাদ দেওয়া

import com.fasterxml.jackson.annotation.JsonIgnore;

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

    @JsonIgnore
    private Double price;

    // Getters and Setters
}

3. Custom Serializer/Deserializer

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

import java.io.IOException;

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

    @JsonSerialize(using = CustomPriceSerializer.class)
    private Double price;

    // Getters and Setters
}

class CustomPriceSerializer extends JsonSerializer<Double> {
    @Override
    public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString("$" + value);
    }
}

Step 4: Validation এবং Error Handling

1. Custom Error Message

Spring Boot স্বয়ংক্রিয়ভাবে validation error message প্রদান করে।

উদাহরণ:

@PostMapping
public ResponseEntity<Product> addProduct(@Validated @RequestBody Product product) {
    product.setId(products.size() + 1);
    products.add(product);
    return ResponseEntity.ok(product);
}

2. Global Exception Handling

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        Map<String, String> errors = new HashMap<>();
        ex.getBindingResult().getFieldErrors().forEach(error -> 
            errors.put(error.getField(), error.getDefaultMessage())
        );
        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}

আউটপুট (Validation Error):

{
  "name": "Name must be between 2 and 100 characters",
  "price": "Price cannot be null"
}

Step 5: Nested Objects এবং Complex JSON Handling

Nested Object মডেল:

public class Order {
    private int orderId;

    @Validated
    private Product product;

    // Getters and Setters
}

Controller Method:

@PostMapping("/orders")
public ResponseEntity<Order> createOrder(@Validated @RequestBody Order order) {
    order.setOrderId(1001);
    return ResponseEntity.ok(order);
}

Spring Boot এবং Jackson-এর মাধ্যমে RESTful API ডেভেলপমেন্ট:

  1. Basic Features: JSON serialization/deserialization সহজে করা যায়।
  2. Advanced Customization: Custom annotations (@JsonProperty, @JsonIgnore, @JsonSerialize) ব্যবহার করে।
  3. Validation and Error Handling: @Validated এবং Global Exception Handler ব্যবহার করে ডেটা integrity নিশ্চিত করা যায়।
  4. Nested Objects: Nested JSON ডেটা সহজেই হ্যান্ডল করা যায়।

Spring Boot এবং Jackson একত্রে ব্যবহার করলে API ডেভেলপমেন্ট দ্রুত, সহজ, এবং কার্যকর হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...