Spring MVC তে @ExceptionHandler অ্যানোটেশন ব্যবহার করে আপনি কাস্টম এক্সসেপশন তৈরি এবং তা হ্যান্ডল করতে পারেন। এটি আপনার অ্যাপ্লিকেশনে Exception Handling সহজ এবং সেন্ট্রালাইজড করতে সাহায্য করে, যাতে ভিউ বা কন্ট্রোলার সঠিকভাবে ত্রুটির তথ্য পাঠাতে পারে এবং প্রয়োজনীয় ব্যবস্থা নিতে পারে।
@ExceptionHandler অ্যানোটেশন দিয়ে আপনি নির্দিষ্ট এক্সসেপশন ক্লাসের জন্য একটি মেথড তৈরি করতে পারেন যা ওই এক্সসেপশন হ্যান্ডল করবে। এটি কন্ট্রোলারের মধ্যে বা গ্লোবাল সেকশনে ব্যবহৃত হতে পারে।
1. কাস্টম এক্সসেপশন তৈরি করা:
প্রথমে আপনাকে একটি কাস্টম এক্সসেপশন ক্লাস তৈরি করতে হবে যা আপনার নির্দিষ্ট ত্রুটি বা সমস্যার জন্য ব্যবহার হবে।
কাস্টম এক্সসেপশন ক্লাস উদাহরণ:
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
এখানে, UserNotFoundException একটি কাস্টম এক্সসেপশন ক্লাস যা RuntimeException থেকে এক্সটেন্ড করেছে। এটি একটি কাস্টম ত্রুটি তৈরি করে, যেটি ব্যবহারকারীর তথ্য না পাওয়ার ক্ষেত্রে ব্যবহার করা হবে।
2. @ExceptionHandler ব্যবহার করে কাস্টম এক্সসেপশন হ্যান্ডলিং:
Spring MVC তে @ExceptionHandler অ্যানোটেশন ব্যবহার করে এক্সসেপশন হ্যান্ডল করা যায়। এটি কন্ট্রোলারে একটি মেথড চিহ্নিত করে যা নির্দিষ্ট এক্সসেপশন হ্যান্ডল করবে।
কন্ট্রোলারে @ExceptionHandler এর উদাহরণ:
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
@ControllerAdvice // Global exception handler
public class GlobalExceptionHandler {
@ExceptionHandler(UserNotFoundException.class) // Handle specific exception
public String handleUserNotFoundException(UserNotFoundException ex, Model model) {
model.addAttribute("errorMessage", ex.getMessage());
return "errorPage"; // Error page to show to the user
}
}
এখানে:
@ExceptionHandler(UserNotFoundException.class): এটিUserNotFoundExceptionএক্সসেপশনকে হ্যান্ডল করার জন্য নির্দিষ্ট করা হয়েছে। যখনUserNotFoundExceptionথ্রো হবে, এই মেথডটি কল হবে।handleUserNotFoundException: এই মেথডটি এক্সসেপশন গ্রহণ করবে এবং ব্যবহারকারীকে একটি কাস্টম errorPage দেখাবে।
Note: @ControllerAdvice ব্যবহার করলে এই এক্সসেপশন হ্যান্ডলারটি অ্যাপ্লিকেশনের সব কন্ট্রোলারে গ্লোবালি প্রযোজ্য হবে। এটি এপ্লিকেশন-লেভেল এক্সসেপশন হ্যান্ডলিং সরবরাহ করে।
3. কন্ট্রোলারে কাস্টম এক্সসেপশন ট্রিগার করা:
কন্ট্রোলারে কাস্টম এক্সসেপশন throw করার মাধ্যমে আপনি নির্দিষ্ট ত্রুটি পরিস্থিতি তৈরি করতে পারেন।
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class UserController {
@GetMapping("/user/{id}")
public String getUserById(@PathVariable("id") int id) {
// যদি ইউজার না পাওয়া যায়, তবে কাস্টম এক্সসেপশন ট্রিগার করুন
if (id <= 0) {
throw new UserNotFoundException("User not found with ID: " + id);
}
return "userDetails"; // Normal processing
}
}
এখানে:
throw new UserNotFoundException(...): যখন ইউজার ID শূন্য বা নেতিবাচক থাকে, তখন কাস্টম এক্সসেপশনটি থ্রো করা হয়।
4. গ্লোবাল এক্সসেপশন হ্যান্ডলার ব্যবহার করা:
@ControllerAdvice গ্লোবাল এক্সসেপশন হ্যান্ডলার হিসেবে কাজ করে। এটি সমস্ত কন্ট্রোলারের জন্য সাধারণ এক্সসেপশন হ্যান্ডলিং প্রদান করে। এটি অ্যাপ্লিকেশনের সকল কন্ট্রোলারের এক্সসেপশন হ্যান্ডলিং কেন্দ্রীয়ভাবে ম্যানেজ করতে সাহায্য করে।
GlobalExceptionHandler উদাহরণ:
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class) // Handle general exceptions
public String handleAllExceptions(Exception ex, Model model) {
model.addAttribute("errorMessage", "An error occurred: " + ex.getMessage());
return "errorPage"; // A general error page
}
@ExceptionHandler(UserNotFoundException.class) // Handle specific exception
public String handleUserNotFoundException(UserNotFoundException ex, Model model) {
model.addAttribute("errorMessage", ex.getMessage());
return "userNotFoundPage"; // Custom error page for User Not Found
}
}
এখানে:
@ControllerAdvice: এটি গ্লোবাল এক্সসেপশন হ্যান্ডলার হিসাবে কাজ করছে।@ExceptionHandler(Exception.class): এটি সাধারণ সকল এক্সসেপশন হ্যান্ডল করবে।@ExceptionHandler(UserNotFoundException.class): এটিUserNotFoundExceptionএর জন্য কাস্টম হ্যান্ডলার তৈরি করবে।
5. কাস্টম এক্সসেপশন এবং হ্যান্ডলিং ভিউ:
কাস্টম এক্সসেপশন হ্যান্ডলিংয়ের জন্য সাধারণত একটি কাস্টম এরর পেজ তৈরি করা হয়, যা ব্যবহারকারীকে এক্সসেপশন সম্পর্কিত পরিষ্কার বার্তা দেখাবে।
Error Page (errorPage.jsp):
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
</head>
<body>
<h1>An error occurred</h1>
<p>${errorMessage}</p>
</body>
</html>
User Not Found Error Page (userNotFoundPage.jsp):
<!DOCTYPE html>
<html>
<head>
<title>User Not Found</title>
</head>
<body>
<h1>User Not Found</h1>
<p>${errorMessage}</p>
</body>
</html>
উপসংহার:
Spring MVC তে @ExceptionHandler ব্যবহার করে কাস্টম এক্সসেপশন হ্যান্ডল করা খুবই সুবিধাজনক। এটি আপনাকে আপনার অ্যাপ্লিকেশনের বিভিন্ন অংশে বিশেষ ত্রুটি ব্যবস্থাপনা এবং ভিউ রেন্ডারিং সহজভাবে কনফিগার করতে সহায়তা করে। এর মাধ্যমে আপনি গ্লোবাল এবং কাস্টম এক্সসেপশন হ্যান্ডলার তৈরি করতে পারেন, যা ত্রুটির ধরন অনুযায়ী ব্যবহারকারীদের সঠিক বার্তা দেখাতে সাহায্য করবে।
Read more