Spring MVC ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে HTTP Request এবং Response এর হ্যান্ডলিং খুবই গুরুত্বপূর্ণ। Spring MVC কন্ট্রোলারগুলি HTTP রিকোয়েস্ট গ্রহণ করে এবং HTTP রেসপন্স প্রদান করে। এটি মডেল-ভিউ-কন্ট্রোলার (MVC) প্যাটার্ন অনুসরণ করে এবং @RequestMapping, @GetMapping, @PostMapping ইত্যাদি অ্যানোটেশন ব্যবহার করে রিকোয়েস্ট হ্যান্ডলিং পরিচালনা করে।
Request এবং Response Handling - Spring MVC তে
1. HTTP Request হ্যান্ডলিং
Spring MVC কন্ট্রোলার ক্লাসে রিকোয়েস্ট মেথড হ্যান্ডল করার জন্য @RequestMapping, @GetMapping, @PostMapping ইত্যাদি অ্যানোটেশন ব্যবহার করা হয়।
@RequestMapping:
@RequestMapping একটি সাধারণ অ্যানোটেশন যা বিভিন্ন HTTP মেথডের জন্য কন্ট্রোলার মেথডে ম্যাপিং করতে ব্যবহৃত হয়।
@Controller
public class MyController {
@RequestMapping("/home")
public String home() {
return "home"; // home.jsp বা home.html দেখানো হবে
}
}
@GetMapping এবং @PostMapping:
@GetMapping এবং @PostMapping রিকোয়েস্টের HTTP মেথড অনুযায়ী কন্ট্রোলার মেথডের জন্য নির্দিষ্ট রিকোয়েস্ট হ্যান্ডল করার জন্য ব্যবহৃত হয়।
@Controller
public class MyController {
@GetMapping("/getExample")
public String getExample() {
return "getExamplePage"; // GET রিকোয়েস্ট হ্যান্ডল করা হবে
}
@PostMapping("/postExample")
public String postExample() {
return "postExamplePage"; // POST রিকোয়েস্ট হ্যান্ডল করা হবে
}
}
2. Request Parameter Handling
Spring MVC রিকোয়েস্ট প্যারামিটারগুলি কন্ট্রোলারে স্বয়ংক্রিয়ভাবে ম্যাপ করে।
Request Parameter চেক করা:
@Controller
public class MyController {
@RequestMapping("/greet")
public String greet(@RequestParam("name") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "greetPage";
}
}
এখানে, @RequestParam অ্যানোটেশনটি রিকোয়েস্ট প্যারামিটার name এর মান স্বয়ংক্রিয়ভাবে কন্ট্রোলারের প্যারামিটার name এ ম্যাপ করবে।
Request Parameter Default Value:
@RequestMapping("/greet")
public String greet(@RequestParam(value = "name", defaultValue = "Guest") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "greetPage";
}
এখানে defaultValue ব্যবহার করা হয়েছে, যদি রিকোয়েস্টে name প্যারামিটার না থাকে তবে এটি ডিফল্ট মান হিসেবে "Guest" নেবে।
3. Model Handling (Data Binding)
Spring MVC কন্ট্রোলার মেথডের মাধ্যমে ভিউতে ডেটা পাঠাতে Model ব্যবহার করা হয়। Model একটি কনটেইনার, যা ভিউতে ডেটা পাঠাতে ব্যবহৃত হয়।
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "helloPage"; // helloPage.jsp বা helloPage.html দেখানো হবে
}
}
4. Path Variables Handling
Spring MVC কন্ট্রোলারে Path Variables ব্যবহারের মাধ্যমে URL প্যারামিটারগুলো নেওয়া যায়। উদাহরণস্বরূপ, /greet/{name} URL তে name প্যারামিটারটি কন্ট্রোলারে পাঠানো হবে।
@Controller
public class MyController {
@RequestMapping("/greet/{name}")
public String greet(@PathVariable("name") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "greetPage";
}
}
এখানে @PathVariable অ্যানোটেশন ব্যবহার করা হয়েছে, যা URL থেকে প্যারামিটার name গ্রহণ করবে।
HTTP Response Handling
Spring MVC তে HTTP Response সাধারণত কন্ট্রোলার মেথডের রিটার্ন ভ্যালু হিসেবে হ্যান্ডল করা হয়। কন্ট্রোলার ভিউ নাম রিটার্ন করে, যা পরে রেন্ডার করা হয়।
1. Return View Name
@Controller
public class MyController {
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home"; // home.jsp বা home.html নামের ভিউ রেন্ডার হবে
}
}
এখানে কন্ট্রোলার মেথড "home" রিটার্ন করছে, যা home.jsp বা home.html ফাইলকে রেন্ডার করবে, যেটি InternalResourceViewResolver দ্বারা প্রক্রিয়া করা হয়।
2. ResponseEntity দিয়ে Response
Spring MVC তে ResponseEntity ব্যবহার করে কাস্টম HTTP রেসপন্স তৈরি করা যায়। এটি HTTP স্টেটাস কোড, হেডার এবং বডি কাস্টমাইজ করতে সাহায্য করে।
@Controller
public class MyController {
@GetMapping("/jsonResponse")
public ResponseEntity<Map<String, String>> jsonResponse() {
Map<String, String> response = new HashMap<>();
response.put("message", "This is a custom JSON response");
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
এখানে, ResponseEntity ব্যবহার করে একটি JSON রেসপন্স পাঠানো হচ্ছে। HTTP স্ট্যাটাস কোড 200 OK সহ JSON ডেটা রিটার্ন করা হচ্ছে।
3. Returning JSON or XML Data
Spring MVC তে @ResponseBody অ্যানোটেশন ব্যবহার করে JSON বা XML ফরম্যাটে ডেটা রিটার্ন করা যায়।
@Controller
public class MyController {
@GetMapping("/jsonExample")
@ResponseBody
public Map<String, String> jsonExample() {
Map<String, String> response = new HashMap<>();
response.put("message", "This is a JSON response");
return response;
}
}
এখানে @ResponseBody অ্যানোটেশন ব্যবহৃত হয়েছে, যা JSON ফরম্যাটে রেসপন্স ফিরিয়ে দেবে।
4. Redirecting Responses
Spring MVC তে রিকোয়েস্ট থেকে রেসপন্স রিডাইরেক্ট করা খুবই সহজ। redirect: প্যাটার্ন ব্যবহার করে কন্ট্রোলার থেকে রিডাইরেক্ট করা যায়।
@Controller
public class MyController {
@RequestMapping("/redirectHome")
public String redirectHome() {
return "redirect:/home"; // /home URL এ রিডাইরেক্ট হবে
}
}
এখানে redirect:/home কন্ট্রোলার রেসপন্স হিসাবে /home URL-এ রিডাইরেক্ট করবে।
5. Forwarding Responses
Spring MVC তে forward: ব্যবহার করে রিকোয়েস্ট ফওয়ার্ড করা যায়।
@Controller
public class MyController {
@RequestMapping("/forwardExample")
public String forwardExample() {
return "forward:/home"; // /home URL-এ ফওয়ার্ড হবে
}
}
এখানে forward:/home রিকোয়েস্টটি /home URL এ ফওয়ার্ড করবে, যেখানে ভিউ রেন্ডার হবে।
Conclusion
Spring MVC তে Request Handling এবং Response Handling খুবই গুরুত্বপূর্ণ। এর মাধ্যমে আপনি বিভিন্ন HTTP রিকোয়েস্ট (যেমন GET, POST) হ্যান্ডল করতে পারেন, ডেটা মডেলিং এবং ভিউ রেন্ডারিং করতে পারেন, এবং বিভিন্ন ধরনের রেসপন্স (JSON, HTML, Redirect, Forward) প্রদান করতে পারেন। Spring MVC আপনাকে একটি শক্তিশালী এবং নমনীয় ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
Spring MVC একটি request-response ভিত্তিক ওয়েব ফ্রেমওয়ার্ক যা HTTP (HyperText Transfer Protocol) প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করে। HTTP রিকোয়েস্ট (Request) এবং রেসপন্স (Response) হল ওয়েব অ্যাপ্লিকেশনের মধ্যে যোগাযোগের প্রধান মাধ্যম। Spring MVC তে HTTP Request এবং HTTP Response কীভাবে কাজ করে এবং এগুলোর ব্যবহারের ধারণা নিচে ব্যাখ্যা করা হলো।
HTTP Request
HTTP Request হল একটি ক্লায়েন্ট (ব্রাউজার, অ্যাপ্লিকেশন, বা অন্য কোনো ক্লায়েন্ট) সার্ভারের কাছে কোনো তথ্য বা সেবা চাওয়ার জন্য পাঠানো অনুরোধ। HTTP রিকোয়েস্টে নিম্নলিখিত মূল অংশ থাকে:
- Request Line: এর মধ্যে HTTP মেথড, রিকোয়েস্ট করা URL এবং HTTP সংস্করণ থাকে।
- উদাহরণ:
GET /home HTTP/1.1 - GET: HTTP মেথড
- /home: রিকোয়েস্ট করা URL
- HTTP/1.1: HTTP সংস্করণ
- উদাহরণ:
- Headers: অতিরিক্ত তথ্য বা মেটাডেটা যা ক্লায়েন্ট এবং সার্ভারের মধ্যে আদান-প্রদান করা হয়।
- উদাহরণ:
Content-Type: text/html,Authorization: Bearer token
- উদাহরণ:
- Body: (যদি প্রয়োজন হয়) রিকোয়েস্টের মধ্যে ডেটা থাকে, যা সার্ভারে পাঠানো হয়। সাধারণত POST, PUT, PATCH রিকোয়েস্টে ব্যবহার করা হয়।
- উদাহরণ: যখন একটি ফর্ম সাবমিট করা হয়, তখন ফর্ম ডেটা এই অংশে থাকে।
HTTP Response
HTTP Response হল সার্ভারের প্রতিক্রিয়া যা ক্লায়েন্টের পাঠানো রিকোয়েস্টের ভিত্তিতে ফেরত আসে। HTTP রেসপন্সেও কিছু মূল উপাদান থাকে:
- Response Line: এর মধ্যে HTTP সংস্করণ, স্ট্যাটাস কোড এবং স্ট্যাটাস বার্তা থাকে।
- উদাহরণ:
HTTP/1.1 200 OK - HTTP/1.1: HTTP সংস্করণ
- 200: HTTP স্ট্যাটাস কোড
- OK: স্ট্যাটাস বার্তা
- উদাহরণ:
- Headers: সার্ভারের পাঠানো অতিরিক্ত তথ্য বা মেটাডেটা।
- উদাহরণ:
Content-Type: text/html,Content-Length: 1024
- উদাহরণ:
- Body: রেসপন্সের মূল কন্টেন্ট, যা ব্রাউজারে প্রদর্শিত হয়। এটি HTML, JSON, XML, ইত্যাদি হতে পারে।
- উদাহরণ: একটি HTML পেজ বা JSON ডেটা।
Spring MVC তে HTTP Request এবং Response ব্যবহারের ধারণা
Spring MVC তে HTTP Request এবং Response পরিচালনা করতে কন্ট্রোলার এবং মডেল ব্যবহার করা হয়। কন্ট্রোলার ক্লাসের মাধ্যমে HTTP রিকোয়েস্ট পাওয়া যায় এবং সেই অনুযায়ী রেসপন্স তৈরি করা হয়।
১. HTTP Request Handling (Spring MVC Controller)
Spring MVC তে HTTP রিকোয়েস্ট পরিচালনার জন্য @RequestMapping বা এর বৈচিত্র্য যেমন @GetMapping, @PostMapping ইত্যাদি ব্যবহার করা হয়। এখানে আমরা দেখবো কীভাবে HTTP রিকোয়েস্ট প্রসেস করা হয়।
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HomeController {
@GetMapping("/home")
public String home(@RequestParam(value = "name", defaultValue = "Guest") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "home"; // Return view name
}
}
এখানে:
@GetMapping("/home"):GETরিকোয়েস্টে/homeURL এর জন্য কন্ট্রোলার মেথড।@RequestParam: রিকোয়েস্ট প্যারামিটার (যেমন?name=John) গ্রহণ করে।Model: ভিউতে ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
২. HTTP Response Handling (Returning Data)
Spring MVC তে HTTP রেসপন্স তৈরি করতে কন্ট্রোলার মেথড একটি ভিউ রিটার্ন করতে পারে, অথবা JSON/XML/HTML রেসপন্স ফেরত দিতে পারে। উদাহরণস্বরূপ, যদি JSON রেসপন্স পাঠাতে চান, তাহলে @RestController বা @ResponseBody ব্যবহার করা হয়।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
@GetMapping("/api/greet")
public String greet() {
return "Hello, API!"; // JSON response
}
}
এখানে:
@RestController: এই অ্যানোটেশন ক্লাসটিকে একটি RESTful কন্ট্রোলার হিসেবে চিহ্নিত করে।@GetMapping("/api/greet"): HTTP GET রিকোয়েস্টে/api/greetURL এর জন্য কন্ট্রোলার মেথড।- Return Value: সরাসরি JSON বা টেক্সট রেসপন্স রিটার্ন করা হয়।
৩. Request and Response Handling with ModelAndView
Spring MVC তে ModelAndView ব্যবহার করে আপনি একই সাথে মডেল এবং ভিউ নির্দিষ্ট করতে পারেন।
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.stereotype.Controller;
@Controller
public class MyController {
@GetMapping("/greet")
public ModelAndView greet() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("greet");
modelAndView.addObject("message", "Welcome to Spring MVC!");
return modelAndView;
}
}
এখানে:
ModelAndView: মডেল (ডেটা) এবং ভিউ (HTML বা অন্য টেমপ্লেট) একত্রে রিটার্ন করা হয়।
Spring MVC তে HTTP Request এবং Response এর সাথে সম্পর্কিত কিছু গুরুত্বপূর্ণ বিষয়:
- RequestMapping: ক্লায়েন্টের HTTP রিকোয়েস্টের সাথে মেথড মেপিং করতে
@RequestMappingবা তার সাব-অ্যানোটেশন (যেমন@GetMapping,@PostMapping) ব্যবহার করা হয়। - RequestParam: রিকোয়েস্ট প্যারামিটার গ্রহণ করার জন্য।
- PathVariable: URL এর অংশ হিসেবে প্যারামিটার গ্রহণ করার জন্য (যেমন
/users/{id})। - Model: ভিউতে ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
- ResponseBody: HTTP রেসপন্সের মধ্যে ডেটা সরাসরি ফেরত পাঠাতে ব্যবহৃত হয় (বিশেষত RESTful অ্যাপ্লিকেশনগুলিতে)।
- Redirect: ক্লায়েন্টকে অন্য URL তে রিডাইরেক্ট করতে
redirect:কিওয়ার্ড ব্যবহার করা হয়।
উপসংহার
Spring MVC তে HTTP Request এবং Response এর ধারণা বুঝে, আপনি ওয়েব অ্যাপ্লিকেশনের রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া সহজভাবে পরিচালনা করতে পারবেন। রিকোয়েস্টের তথ্য সংগ্রহ করে সেগুলির ভিত্তিতে রেসপন্স তৈরি করা হয় এবং Spring MVC তে আপনি এই কাজটি খুব সহজে করতে পারেন বিভিন্ন অ্যানোটেশন এবং কনফিগারেশনের মাধ্যমে।
Spring MVC এ বিভিন্ন ধরণের HTTP রিকোয়েস্ট প্যারামিটার গ্রহণ করার জন্য @RequestParam, @PathVariable, এবং @RequestBody অ্যানোটেশনগুলি ব্যবহার করা হয়। এগুলি HTTP রিকোয়েস্ট থেকে ডেটা এক্সট্র্যাক্ট করতে এবং কন্ট্রোলার মেথডে পাস করতে ব্যবহৃত হয়।
নিচে প্রতিটি অ্যানোটেশনের ব্যবহার এবং উদাহরণ দেওয়া হলো:
1. @RequestParam
@RequestParam অ্যানোটেশনটি URL-এর কুয়েরি প্যারামিটার (query parameters) বা ফর্ম ডেটা থেকে প্যারামিটার ভ্যালু গ্রহণ করার জন্য ব্যবহৃত হয়।
ব্যবহার:
- সাধারণত GET রিকোয়েস্টে URL এর কুয়েরি স্ট্রিং থেকে প্যারামিটার পাঠানো হয়।
- POST বা PUT রিকোয়েস্টে ফর্ম ডেটা (form data) থেকে প্যারামিটার নেয়।
উদাহরণ:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String getUser(@RequestParam String name, @RequestParam int age) {
return "Name: " + name + ", Age: " + age;
}
}
URL:
http://localhost:8080/user?name=John&age=25
আউটপুট:
Name: John, Age: 25
ব্যাখ্যা:
- এখানে
@RequestParamব্যবহার করা হয়েছে name এবং age প্যারামিটার থেকে মান গ্রহণ করতে। এগুলো URL থেকে নেওয়া হয় যেমন?name=John&age=25।
2. @PathVariable
@PathVariable অ্যানোটেশনটি URL পাথে থাকা ডাইনামিক ভ্যালু বা ভ্যারিয়েবলকে কন্ট্রোলার মেথডের প্যারামিটার হিসেবে গ্রহণ করতে ব্যবহৃত হয়।
ব্যবহার:
- RESTful API তে পাথ ভ্যারিয়েবল বা পাথ প্যারামিটার ব্যবহার করা হয়, যেখানে URL পাথে ডেটা সন্নিবেশিত থাকে।
উদাহরণ:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user/{username}")
public String getUser(@PathVariable String username) {
return "User: " + username;
}
}
URL:
http://localhost:8080/user/john_doe
আউটপুট:
User: john_doe
ব্যাখ্যা:
- এখানে
@PathVariableব্যবহার করা হয়েছেusernameপ্যারামিটারকে পাথ থেকে গ্রহণ করার জন্য, যেটি URL-এর/user/{username}পাথে থাকা ভ্যালু থেকে পাওয়া যায়।
3. @RequestBody
@RequestBody অ্যানোটেশনটি HTTP রিকোয়েস্ট বডি থেকে JSON, XML বা অন্যান্য ডেটা ফর্ম্যাটে আসা ডেটা গ্রহণ করতে ব্যবহৃত হয়। এটি সাধারণত POST, PUT বা PATCH রিকোয়েস্টে ব্যবহার করা হয়, যেখানে ক্লায়েন্ট ডেটা সার্ভারে পাঠায়।
ব্যবহার:
- ক্লায়েন্ট থেকে JSON ডেটা পাঠানোর জন্য,
@RequestBodyঅ্যানোটেশনটি মডেল অবজেক্টে ম্যাপ করা হয়।
উদাহরণ:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return "User created with username: " + user.getUsername() + " and age: " + user.getAge();
}
}
JSON রিকোয়েস্ট বডি:
{
"username": "john_doe",
"age": 25
}
আউটপুট:
User created with username: john_doe and age: 25
ব্যাখ্যা:
- এখানে
@RequestBodyব্যবহার করা হয়েছে JSON ডেটা গ্রহণ করার জন্য, যা সরাসরি User অবজেক্টে ম্যাপ করা হয়। ক্লায়েন্ট থেকে পাঠানো JSON ডেটা স্বয়ংক্রিয়ভাবেUserক্লাসে কনভার্ট হয়ে কন্ট্রোলারের মেথডে পাস হয়।
সংক্ষেপে তিনটি অ্যানোটেশনের তুলনা
| অ্যানোটেশন | ব্যবহৃত হয় | উদাহরণ |
|---|---|---|
@RequestParam | কুয়েরি প্যারামিটার বা ফর্ম ডেটা থেকে ডেটা নেওয়া | /user?name=John&age=25 |
@PathVariable | URL পাথ থেকে ডেটা নেওয়া | /user/{username} |
@RequestBody | রিকোয়েস্ট বডি থেকে JSON/XML ডেটা গ্রহণ | { "username": "john_doe", "age": 25 } |
উপসংহার
@RequestParamসাধারণত কুয়েরি প্যারামিটার বা ফর্ম ডেটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়।@PathVariableURL পাথ থেকে ডাইনামিক ডেটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়, যা RESTful APIs এর জন্য উপযুক্ত।@RequestBodyJSON বা XML ডেটা রিকোয়েস্ট বডি থেকে গ্রহণ করতে ব্যবহৃত হয়, এবং এটি POST বা PUT রিকোয়েস্টে ব্যবহৃত হয়।
Spring MVC এর মাধ্যমে @RequestParam, @PathVariable, এবং @RequestBody ব্যবহারের মাধ্যমে ডেটা এক্সট্র্যাক্ট করা খুবই সহজ এবং এটি আপনাকে API এবং ওয়েব অ্যাপ্লিকেশনগুলোর জন্য অত্যন্ত নমনীয় এবং শক্তিশালী কন্ট্রোলার মেথড তৈরি করতে সহায়ক।
Spring MVC তে JSON বা XML রেসপন্স তৈরি করা খুবই সহজ, বিশেষ করে যদি আপনি Spring Boot ব্যবহার করেন, কারণ Spring Boot এটি স্বয়ংক্রিয়ভাবে সাপোর্ট করে। এখানে আমি আপনাকে JSON এবং XML রেসপন্স তৈরির প্রক্রিয়া ব্যাখ্যা করব।
Spring MVC: JSON/XML Response তৈরি করার পদ্ধতি
Step 1: Spring Boot Dependency
প্রথমে, আপনার pom.xml ফাইলে Spring Web dependency যোগ করুন যদি আপনি এটি ইতোমধ্যে না করে থাকেন।
<dependencies>
<!-- Spring Web dependency for REST API (JSON/XML support) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Jackson (for JSON support) -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- JAXB (for XML support) -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
</dependencies>
- Jackson: Spring Boot ডিফল্টভাবে JSON সাপোর্টের জন্য Jackson লাইব্রেরি ব্যবহার করে।
- JAXB: XML রেসপন্সের জন্য JAXB (Java Architecture for XML Binding) ব্যবহার করা হয়।
Step 2: JSON Response তৈরি করা
Spring MVC-তে JSON রেসপন্স তৈরি করতে @RestController এবং @RequestMapping ব্যবহার করা হয়। @RestController অ্যানোটেশনটি @Controller এবং @ResponseBody এর সংমিশ্রণ, যা একটি JSON বা XML রেসপন্স সরাসরি রিটার্ন করতে সাহায্য করে।
Controller (JSON Response)
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/api")
public class ProductController {
@GetMapping("/products")
public List<Product> getProducts() {
return Arrays.asList(
new Product(1, "Laptop", 500),
new Product(2, "Smartphone", 300)
);
}
}
class Product {
private int id;
private String name;
private int price;
public Product(int id, String name, int price) {
this.id = id;
this.name = name;
this.price = 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 int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
Explanation:
@RestController: এটি Spring MVC-তে একটি বিশেষ কন্ট্রোলার, যা স্বয়ংক্রিয়ভাবে রেসপন্সকে JSON ফর্ম্যাটে রিটার্ন করবে।@GetMapping("/products"): HTTP GET রিকোয়েস্টে/api/productsএ পৌঁছালে এটি JSON রেসপন্স হিসেবে প্রোডাক্টগুলির লিস্ট ফিরিয়ে দেবে।- Product Class: একটি POJO (Plain Old Java Object) যা
id,name, এবংpriceফিল্ড ধারণ করে। Jackson লাইব্রেরি স্বয়ংক্রিয়ভাবে এই ক্লাসের অবজেক্টকে JSON-এ রূপান্তরিত করবে।
Sample JSON Response:
[
{
"id": 1,
"name": "Laptop",
"price": 500
},
{
"id": 2,
"name": "Smartphone",
"price": 300
}
]
Step 3: XML Response তৈরি করা
XML রেসপন্স তৈরির জন্য JAXB এবং @XmlRootElement অ্যানোটেশন ব্যবহার করতে হবে। আপনি Spring Boot এ JAXB বা Jackson XML ব্যবহার করতে পারেন। এখানে JAXB ব্যবহার করা হয়েছে।
Controller (XML Response)
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/api")
public class ProductController {
@GetMapping(value = "/products", produces = "application/xml")
public List<Product> getProducts() {
return Arrays.asList(
new Product(1, "Laptop", 500),
new Product(2, "Smartphone", 300)
);
}
}
@XmlRootElement
class Product {
private int id;
private String name;
private int price;
public Product(int id, String name, int price) {
this.id = id;
this.name = name;
this.price = price;
}
// Getters and Setters
@XmlElement
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
Explanation:
produces = "application/xml":@GetMappingএর মাধ্যমে আমরা এই রিকোয়েস্টটি XML ফর্ম্যাটে রিটার্ন করতে বলছি।@XmlRootElement: JAXB অ্যানোটেশন যা Product ক্লাসকে XML রুট এলিমেন্ট হিসেবে চিহ্নিত করে।@XmlElement: JAXB অ্যানোটেশন যা XML এর এলিমেন্ট হিসেবে মডেল ক্লাসের ফিল্ড গুলি চিহ্নিত করে।
Sample XML Response:
<products>
<product>
<id>1</id>
<name>Laptop</name>
<price>500</price>
</product>
<product>
<id>2</id>
<name>Smartphone</name>
<price>300</price>
</product>
</products>
Step 4: Handling Both JSON and XML (Content Negotiation)
Spring MVC সাপোর্ট করে Content Negotiation, যার মাধ্যমে একই এন্ডপয়েন্টের মাধ্যমে আপনি JSON এবং XML রেসপন্স উভয়ই প্রাপ্ত করতে পারেন। Spring HTTP রিকোয়েস্টের Accept হেডার চেক করে সঠিক ফরম্যাট প্রদান করবে।
Controller (Both JSON and XML)
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/api")
public class ProductController {
@GetMapping("/products")
public List<Product> getProducts() {
return Arrays.asList(
new Product(1, "Laptop", 500),
new Product(2, "Smartphone", 300)
);
}
}
Sample Request and Responses:
- Request for JSON:
Accept: application/json- Response: JSON response (as shown earlier).
- Request for XML:
Accept: application/xml- Response: XML response (as shown earlier).
Conclusion
Spring MVC তে JSON এবং XML রেসপন্স তৈরি করা খুবই সহজ। @RestController এবং @RequestMapping ব্যবহার করে আপনি সহজে JSON রেসপন্স তৈরি করতে পারেন এবং JAXB ব্যবহার করে XML রেসপন্স তৈরি করা সম্ভব। আপনি Content Negotiation ব্যবহার করে একই এন্ডপয়েন্ট থেকে JSON এবং XML রেসপন্স উভয়ই প্রেরণ করতে পারেন, যা RESTful API ডিজাইনের একটি গুরুত্বপূর্ণ অংশ।
Spring MVC তে Request Management এবং Response Management হল ওয়েব রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া করার জন্য ব্যবহৃত উপায়। এখানে, আমরা HTTP রিকোয়েস্ট এবং রেসপন্স কিভাবে ম্যানেজ করতে পারি তা আলোচনা করব এবং উদাহরণ সহ ব্যাখ্যা করব।
1. Spring MVC Request Management:
Spring MVC তে Request ম্যানেজমেন্ট মূলত @RequestMapping, @GetMapping, @PostMapping, @RequestParam, এবং অন্যান্য অ্যানোটেশন ব্যবহার করে করা হয়। কন্ট্রোলার ক্লাসে এই অ্যানোটেশনগুলি রিকোয়েস্টের পদ্ধতি (GET, POST ইত্যাদি) এবং URL প্যাটার্ন অনুযায়ী রিকোয়েস্ট ম্যানেজ করতে সাহায্য করে।
Request Handling with @RequestMapping and @RequestParam:
Spring MVC কন্ট্রোলারে @RequestMapping অ্যানোটেশন ব্যবহৃত হয় রিকোয়েস্ট পদ্ধতি এবং URL প্যাটার্ন ম্যাপ করার জন্য। @RequestParam অ্যানোটেশন দিয়ে আপনি ইউজার দ্বারা প্রেরিত প্যারামিটার গ্রহণ করতে পারেন।
উদাহরণ: Request Management
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
@Controller
@RequestMapping("/greet")
public class GreetingController {
// Request handling with @RequestMapping
@RequestMapping("/hello")
public String greetUser(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "greet"; // Return view name (greet.html)
}
// Request handling with @GetMapping
@GetMapping("/goodbye")
public String goodbyeUser(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name, Model model) {
model.addAttribute("message", "Goodbye, " + name);
return "greet"; // Return view name (greet.html)
}
}
@RequestMapping("/hello"): রিকোয়েস্টের URL/greet/helloএ মেটারিক্স করবে।@RequestParam(name = "name"): URL থেকেnameপ্যারামিটার গ্রহণ করবে। যদি প্যারামিটার না পাঠানো হয়, তবেGuestডিফল্ট মান হিসেবে ব্যবহার করা হবে।Model model: মডেল ডাটা ভিউতে পাঠাতে ব্যবহৃত হয়।
View (greet.html - Thymeleaf):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Greeting</title>
</head>
<body>
<h1 th:text="${message}"></h1> <!-- Display message -->
</body>
</html>
2. Spring MVC Response Management:
Spring MVC তে Response ম্যানেজমেন্টের জন্য মূলত কন্ট্রোলার মেথডে রিটার্ন ভ্যালু ব্যবহার করা হয়। সাধারণত, কন্ট্রোলার একটি ভিউ নাম রিটার্ন করে যা HTML ফাইল হিসেবে রেন্ডার হয়। তবে আপনি ResponseEntity অথবা @ResponseBody ব্যবহার করে JSON বা XML আউটপুটও পাঠাতে পারেন।
Response Handling with @ResponseBody:
@ResponseBody অ্যানোটেশন ব্যবহৃত হয় যাতে কন্ট্রোলার মেথড সরাসরি HTTP রেসপন্সে ডাটা পাঠাতে পারে, যেমন JSON বা XML।
উদাহরণ: Response Management with @ResponseBody
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class ResponseController {
// Return response directly as a String
@GetMapping("/message")
@ResponseBody
public String getMessage() {
return "This is a simple response message!";
}
// Return response as JSON
@GetMapping("/json")
@ResponseBody
public MyResponse getJsonResponse() {
return new MyResponse("Success", "Data fetched successfully");
}
// A simple POJO class for JSON response
public static class MyResponse {
private String status;
private String message;
public MyResponse(String status, String message) {
this.status = status;
this.message = message;
}
public String getStatus() {
return status;
}
public String getMessage() {
return message;
}
}
}
@ResponseBody: এই অ্যানোটেশনটি কন্ট্রোলারের রিটার্ন ভ্যালুকে HTTP রেসপন্সে ডিরেক্টলি রিটার্ন করার জন্য ব্যবহৃত হয়। এখানেStringবাMyResponseটাইপ রিটার্ন হতে পারে।- JSON Response:
@ResponseBodyএবং@GetMappingব্যবহৃত হয় JSON ডাটা রিটার্ন করার জন্য।
3. Request and Response with Path Variables
Spring MVC তে, URL পাথ থেকে ভ্যালু গ্রহণ করতে @PathVariable অ্যানোটেশন ব্যবহার করা হয়।
উদাহরণ: Request Management with Path Variables
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PathVariableController {
@GetMapping("/hello/{name}")
@ResponseBody
public String greetPerson(@PathVariable("name") String name) {
return "Hello, " + name;
}
}
@PathVariable("name"): রিকোয়েস্ট URL থেকেnameভ্যালু পাথ ভেরিয়েবল হিসেবে গ্রহণ করা হয়। উদাহরণস্বরূপ, URL/hello/Johnহলে আউটপুট হবে "Hello, John"।
4. Using ResponseEntity for Custom Responses
ResponseEntity একটি কাস্টম HTTP রেসপন্স তৈরি করার জন্য ব্যবহৃত হয়। এটি HTTP স্ট্যাটাস কোড, হেডার এবং বডি সহ রেসপন্স কাস্টমাইজ করার সুযোগ দেয়।
উদাহরণ: ResponseEntity with Custom Status and Headers
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomResponseController {
@GetMapping("/customresponse")
public ResponseEntity<String> customResponse() {
return new ResponseEntity<>("Custom Response Message", HttpStatus.OK);
}
}
ResponseEntity: এটি HTTP রেসপন্সের বডি, স্ট্যাটাস কোড এবং হেডার কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এখানে রেসপন্স বডি হিসেবে"Custom Response Message"এবং স্ট্যাটাস কোডOK(200) পাঠানো হচ্ছে।
5. Handling Form Data in Spring MVC
Spring MVC তে ফর্ম ডাটা প্রক্রিয়া করতে, @ModelAttribute এবং @RequestParam ব্যবহার করা হয়।
উদাহরণ: Handling Form Data
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
@Controller
public class FormController {
@PostMapping("/submitForm")
public String submitForm(@RequestParam(name = "username") String username, Model model) {
model.addAttribute("message", "Hello, " + username);
return "formresult"; // Return view name (formresult.html)
}
}
@RequestParam(name = "username"): ফর্মেরusernameফিল্ড থেকে ডাটা নেয়।Model model: ফর্মের ডাটা মডেল মাধ্যমে ভিউতে পাঠানো হয়।
Form Submission (form.html):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Form Submission</title>
</head>
<body>
<form action="/submitForm" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" />
<button type="submit">Submit</button>
</form>
</body>
</html>
Result View (formresult.html):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Form Result</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
উপসংহার:
Spring MVC তে Request এবং Response Management খুবই গুরুত্বপূর্ণ। @RequestMapping, @RequestParam, @PathVariable, @ResponseBody, এবং ResponseEntity এর মাধ্যমে আপনি ওয়েব রিকোয়েস্ট এবং রেসপন্স গুলি অত্যন্ত ফ্লেক্সিবলি ম্যানেজ করতে পারেন। Spring MVC এর সাহায্যে আপনি ফর্ম ডাটা গ্রহণ, কাস্টম রেসপন্স পাঠানো, এবং JSON/XML রেসপন্স সহ বিভিন্ন কাস্টম রিকোয়েস্ট প্রক্রিয়া করতে সক্ষম হবেন।
Read more