@ExceptionHandler এবং @ControllerAdvice এর ব্যবহার

Spring ORM এ Exception Handling - স্প্রিং ওআরএম (Spring ORM) - Java Technologies

279

@ExceptionHandler এর ধারণা

@ExceptionHandler একটি Spring MVC এনোটেশন যা কাস্টমাইজড এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট এক্সেপশন বা একাধিক এক্সেপশন ধরার জন্য কনট্রোলার ক্লাস বা এর মেথডে সংজ্ঞায়িত করা হয়।

বৈশিষ্ট্য:

  • নির্দিষ্ট কনট্রোলারের জন্য কার্যকর।
  • নির্দিষ্ট এক্সেপশন অনুযায়ী কাস্টম রেসপন্স প্রদান করতে সক্ষম।

@ControllerAdvice এর ধারণা

@ControllerAdvice Spring Framework-এর একটি গ্লোবাল এক্সেপশন হ্যান্ডলিং এনোটেশন, যা অ্যাপ্লিকেশনের সমস্ত কনট্রোলার ক্লাসের জন্য কমন এক্সেপশন হ্যান্ডলিং সরবরাহ করে। এটি একাধিক কনট্রোলার ক্লাসে একই এক্সেপশন হ্যান্ডলিং লজিক পুনরাবৃত্তি করা এড়ায়।

বৈশিষ্ট্য:

  • গ্লোবাল লেভেলে কাজ করে।
  • নির্দিষ্ট প্যাকেজ বা ক্লাসের জন্য এক্সেপশন হ্যান্ডলিং সীমাবদ্ধ করা যায়।
  • @ExceptionHandler, @ModelAttribute, এবং @InitBinder সমর্থন করে।

@ExceptionHandler এর ব্যবহার

উদাহরণ: নির্দিষ্ট এক্সেপশন হ্যান্ডলিং

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

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        // যদি ব্যবহারকারী না পাওয়া যায়
        throw new UserNotFoundException("User not found with id: " + id);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

@ControllerAdvice এর ব্যবহার

উদাহরণ: গ্লোবাল এক্সেপশন হ্যান্ডলিং

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + ex.getMessage());
    }
}

@ExceptionHandler এবং @ControllerAdvice এর মধ্যে পার্থক্য

বৈশিষ্ট্য@ExceptionHandler@ControllerAdvice
সীমাবদ্ধতানির্দিষ্ট কনট্রোলারের জন্য কার্যকর।গ্লোবাল বা নির্দিষ্ট প্যাকেজ/ক্লাসের জন্য কার্যকর।
পুনরাবৃত্তিএকাধিক কনট্রোলারে পুনরাবৃত্তি হতে পারে।পুনরাবৃত্তি এড়াতে একটি কেন্দ্রীভূত হ্যান্ডলার।
লগিকের পুনরায় ব্যবহারসীমিত।সমস্ত কনট্রোলারে একই হ্যান্ডলিং লজিক প্রযোজ্য।

কেন এই এনোটেশনগুলো প্রয়োজন?

  1. কোড পরিষ্কার ও সংগঠিত রাখে: নির্দিষ্ট এক্সেপশন বা গ্লোবাল লেভেলে এক্সেপশন হ্যান্ডলিং আলাদা রাখা যায়।
  2. কাস্টম রেসপন্স: ক্লায়েন্টের জন্য স্পষ্ট এবং প্রয়োজনমাফিক রেসপন্স তৈরি করা যায়।
  3. পুনরাবৃত্তি কমায়: একাধিক কনট্রোলারে একই লজিক পুনরায় লেখা থেকে মুক্তি দেয়।
  4. সহজ ডিবাগিং: এক্সেপশন হ্যান্ডলিং কেন্দ্রীয়ভাবে পরিচালনা করা যায়।

@ExceptionHandler এবং @ControllerAdvice এর বাস্তব ব্যবহার

স্টেপ ১: কাস্টম এক্সেপশন তৈরি করা

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

স্টেপ ২: গ্লোবাল হ্যান্ডলার তৈরি করা

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

স্টেপ ৩: কনট্রোলারে এক্সেপশন থ্রো করা

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

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        if (id == null || id <= 0) {
            throw new UserNotFoundException("User not found with id: " + id);
        }
        // ডামি ইউজার রিটার্ন করা
        return new User(id, "John Doe", "john.doe@example.com");
    }
}

সারাংশ

  • @ExceptionHandler নির্দিষ্ট কনট্রোলারের এক্সেপশন হ্যান্ডলিং পরিচালনা করে।
  • @ControllerAdvice সমস্ত কনট্রোলারের জন্য গ্লোবাল এক্সেপশন হ্যান্ডলিং নিশ্চিত করে।
  • এই দুই এনোটেশন একত্রে ব্যবহার করলে অ্যাপ্লিকেশনের এক্সেপশন হ্যান্ডলিং আরও কার্যকর এবং সংগঠিত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...