Spring Boot অ্যাপ্লিকেশন তৈরি করার সময়, ভুল (exception) হ্যান্ডলিং একটি গুরুত্বপূর্ণ অংশ। যখনই কোনো ত্রুটি বা ব্যতিক্রম ঘটে, তখন সেই ত্রুটির সঠিকভাবে হ্যান্ডলিং করা দরকার, যাতে অ্যাপ্লিকেশন নির্বিঘ্নে চলতে পারে এবং ব্যবহারকারীকে উপযুক্ত তথ্য প্রদান করা যায়। Spring Framework এই সমস্যা সমাধানের জন্য দুটি গুরুত্বপূর্ণ অ্যানোটেশন প্রদান করেছে: @ControllerAdvice এবং @ExceptionHandler।
এই টিউটোরিয়ালে, আমরা @ControllerAdvice এবং @ExceptionHandler এর ব্যবহার বিস্তারিতভাবে আলোচনা করব।
@ControllerAdvice
@ControllerAdvice হল একটি স্প্রিং অ্যানোটেশন যা গ্লোবাল (বিশ্বব্যাপী) এক্সসেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এটি সমস্ত কন্ট্রোলার ক্লাসে সংঘটিত ব্যতিক্রমগুলোকে একটি একক পয়েন্ট থেকে হ্যান্ডল করতে সাহায্য করে। একে একটি সেন্ট্রাল প্লেস হিসেবে ব্যবহার করা হয়, যেখানে আপনি সমস্ত কন্ট্রোলারের জন্য এক্সসেপশন হ্যান্ডলিংয়ের কাস্টমাইজড পদ্ধতি নির্ধারণ করতে পারেন।
প্রধান বৈশিষ্ট্যসমূহ:
- গ্লোবাল এক্সসেপশন হ্যান্ডলিং: এটি সমস্ত কন্ট্রোলারের জন্য এক্সসেপশন হ্যান্ডলিংয়ের একটি সাধারণ পদ্ধতি প্রদান করে।
- এমনকি কাস্টম এক্সসেপশনও হ্যান্ডল করতে পারে: আপনি কাস্টম এক্সসেপশনগুলোও হ্যান্ডল করতে পারবেন।
- ResponseEntity-এর মাধ্যমে কাস্টম রেসপন্স প্রদান: আপনি কাস্টম HTTP রেসপন্স কোড সহ ত্রুটি মেসেজ পাঠাতে পারেন।
উদাহরণ
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGlobalException(Exception ex) {
return new ResponseEntity<>("An error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
এখানে, আমরা ResourceNotFoundException এবং সাধারণ Exception হ্যান্ডলিংয়ের জন্য দুটি আলাদা মেথড ব্যবহার করেছি। @ExceptionHandler অ্যাপ্লিকেশনটিতে যেকোনো কন্ট্রোলারের জন্য এই এক্সসেপশনগুলোকে গ্লোবালি হ্যান্ডল করতে পারে।
@ExceptionHandler
@ExceptionHandler অ্যানোটেশনটি ব্যবহৃত হয় এক বা একাধিক নির্দিষ্ট ব্যতিক্রম (exception) হ্যান্ডল করার জন্য। এটি কেবলমাত্র নির্দিষ্ট কন্ট্রোলার ক্লাসের মধ্যে কার্যকরী, কিন্তু যখন এটি @ControllerAdvice এর সাথে ব্যবহার করা হয়, তখন এটি গ্লোবাল এক্সসেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়।
প্রধান বৈশিষ্ট্যসমূহ:
- নির্দিষ্ট এক্সসেপশন হ্যান্ডলিং:
@ExceptionHandlerশুধুমাত্র সেই এক্সসেপশন হ্যান্ডল করে, যা মেথডে উল্লেখ করা হয়। - বিশেষ কাস্টম এক্সসেপশন হ্যান্ডলিং: আপনি কাস্টম এক্সসেপশন হ্যান্ডল করতে পারেন যা অ্যাপ্লিকেশনে নির্দিষ্ট কোনো সমস্যার জন্য তৈরি করা হয়।
উদাহরণ
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
User user = userService.findById(id);
if (user == null) {
throw new ResourceNotFoundException("User not found with id: " + id);
}
return user;
}
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFound(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}
এখানে, যদি getUser মেথডে ResourceNotFoundException ফেলা হয়, তাহলে @ExceptionHandler সেই এক্সসেপশনটি হ্যান্ডল করবে এবং একটি কাস্টম HTTP রেসপন্স ফিরিয়ে দেবে।
@ControllerAdvice এবং @ExceptionHandler এর মিল এবং পার্থক্য
- মিল: উভয়ই ব্যতিক্রম (exception) হ্যান্ডল করার জন্য ব্যবহৃত হয়।
@ExceptionHandlerএকটি নির্দিষ্ট এক্সসেপশন ক্লাসের জন্য এবং@ControllerAdviceসমস্ত কন্ট্রোলারে এক্সসেপশন হ্যান্ডল করার জন্য ব্যবহৃত হয়। - পার্থক্য:
@ControllerAdviceহল একটি গ্লোবাল সেন্ট্রাল পয়েন্ট যা একাধিক কন্ট্রোলারের এক্সসেপশন হ্যান্ডল করতে পারে, যেখানে@ExceptionHandlerনির্দিষ্ট কন্ট্রোলারের মধ্যে ব্যবহৃত হয় এবং শুধুমাত্র নির্দিষ্ট এক্সসেপশন হ্যান্ডল করে।
সারাংশ
Spring Boot অ্যাপ্লিকেশনে @ControllerAdvice এবং @ExceptionHandler ব্যতিক্রম (exception) হ্যান্ডলিংয়ের জন্য অত্যন্ত শক্তিশালী সরঞ্জাম। @ControllerAdvice গ্লোবালভাবে ব্যতিক্রম হ্যান্ডল করার জন্য ব্যবহৃত হয় এবং @ExceptionHandler এক বা একাধিক নির্দিষ্ট ব্যতিক্রমের জন্য ব্যবহৃত হয়। এই দুটি অ্যানোটেশন ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনে সব ধরনের ত্রুটি এবং ব্যতিক্রম কার্যকরীভাবে হ্যান্ডল করতে পারবেন এবং ব্যবহারকারীদের জন্য কাস্টম ত্রুটি বার্তা বা HTTP রেসপন্স পাঠাতে পারবেন।
Read more