Spring MVC এ Exception Handling এর ধারণা

Exception Handling এবং @ControllerAdvice - স্প্রিং এমভিসি (Spring MVC) - Java Technologies

403

Spring MVC অ্যাপ্লিকেশনগুলিতে Exception Handling একটি গুরুত্বপূর্ণ দিক, যেহেতু ব্যবহারকারী বা সিস্টেমের বিভিন্ন ত্রুটি (errors) সঠিকভাবে পরিচালনা করা প্রয়োজন। Spring MVC-তে Exception Handling পরিচালনা করার জন্য বেশ কিছু সুবিধাজনক পদ্ধতি রয়েছে, যা অ্যাপ্লিকেশনকে আরো স্থিতিশীল এবং ব্যবহারকারীর জন্য উপকারী করে তোলে।

Spring MVC এর Exception Handling দুটি প্রধানভাবে পরিচালনা করা হয়:

  1. Controller-level exception handling
  2. Global exception handling

1. Controller-level Exception Handling

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

@ExceptionHandler Example:

import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseStatus;

@Controller
public class MyController {

    @GetMapping("/divide")
    public String divideNumbers(int num1, int num2) {
        int result = num1 / num2;  // Possible divide by zero exception
        return "result"; 
    }

    @ExceptionHandler(ArithmeticException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)  // Set HTTP status code 400
    public String handleArithmeticException(ArithmeticException ex, Model model) {
        model.addAttribute("error", "Error: " + ex.getMessage());
        return "errorPage";  // Show custom error page
    }
}

ব্যাখ্যা:

  • @ExceptionHandler: এই অ্যানোটেশনটি সুনির্দিষ্ট exception ধরণের জন্য exception handler মেথড নির্ধারণ করে।
  • ArithmeticException: এখানে আমরা ArithmeticException (যেমন, division by zero) হ্যান্ডল করতে একটি মেথড তৈরি করেছি।
  • @ResponseStatus: এই অ্যানোটেশনটি HTTP রেসপন্স কোড নির্ধারণ করতে ব্যবহৃত হয়। এখানে আমরা BAD_REQUEST (400) কোড ব্যবহার করেছি।

2. Global Exception Handling

Spring MVC-তে Global Exception Handling করতে @ControllerAdvice অ্যানোটেশন ব্যবহৃত হয়। এটি সারা অ্যাপ্লিকেশন জুড়ে exception হ্যান্ডলিং করার একটি কেন্দ্রীয় স্থান প্রদান করে।

@ControllerAdvice Example:

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ArithmeticException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleArithmeticException(ArithmeticException ex, Model model) {
        model.addAttribute("error", "Global Error: " + ex.getMessage());
        return "errorPage";
    }

    @ExceptionHandler(NullPointerException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String handleNullPointerException(NullPointerException ex, Model model) {
        model.addAttribute("error", "Global Error: Null pointer exception");
        return "errorPage";
    }
}

ব্যাখ্যা:

  • @ControllerAdvice: এটি কন্ট্রোলারগুলির বাইরে একটি কেন্দ্রীয় পদ্ধতি যা সমস্ত @ExceptionHandler অ্যানোটেশন যুক্ত মেথড সারা অ্যাপ্লিকেশনের জন্য কার্যকর করে।
  • Global Exception Handling: এই কোডে, আমরা সমস্ত কন্ট্রোলারদের জন্য ArithmeticException এবং NullPointerException হ্যান্ডল করেছি।

3. Using ResponseEntity for Custom Response

Spring MVC-তে ResponseEntity ব্যবহার করে আপনি কাস্টম HTTP রেসপন্স এবং ত্রুটি তথ্যও ফেরত দিতে পারেন।

Example with ResponseEntity:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ControllerAdvice;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ArithmeticException.class)
    public ResponseEntity<String> handleArithmeticException(ArithmeticException ex) {
        return new ResponseEntity<>("Error: " + ex.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(NullPointerException.class)
    public ResponseEntity<String> handleNullPointerException(NullPointerException ex) {
        return new ResponseEntity<>("Error: Null pointer exception occurred", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

ব্যাখ্যা:

  • ResponseEntity: এখানে, আমরা কাস্টম HTTP status এবং message ফেরত দিচ্ছি, যা ক্লায়েন্টকে ত্রুটির বিস্তারিত তথ্য প্রদান করবে।
  • HttpStatus: HttpStatus.BAD_REQUEST বা HttpStatus.INTERNAL_SERVER_ERROR রিটার্ন করা হচ্ছে।

4. Using @ResponseStatus for Automatic HTTP Status Codes

Spring MVC-তে @ResponseStatus অ্যানোটেশন ব্যবহার করে, আমরা স্বয়ংক্রিয়ভাবে exception হ্যান্ডলিংয়ের সময় HTTP status code সেট করতে পারি।

Example with @ResponseStatus:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

ব্যাখ্যা:

  • @ResponseStatus: এখানে আমরা ResourceNotFoundException exception ক্লাসে HttpStatus.NOT_FOUND (404) ব্যবহার করেছি, যাতে এই exception ঘটলে 404 Not Found HTTP রেসপন্স ফেরত পাঠানো হয়।

5. Custom Error Page Configuration

Spring MVC-তে custom error page কনফিগার করতে, আপনি web.xml বা Java configuration এ error mapping করতে পারেন।

web.xml Example:

<error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/errorPage.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404Error.jsp</location>
</error-page>

ব্যাখ্যা:

  • এখানে, আমরা একটি ArithmeticException এবং 404 error এর জন্য কাস্টম error page সঠিকভাবে মেলাতে error-page কনফিগার করেছি।

Best Practices for Exception Handling in Spring MVC

  1. Use @ControllerAdvice for Global Exception Handling:
    • @ControllerAdvice ব্যবহার করে, আপনি অ্যাপ্লিকেশনের সারা অংশে exception হ্যান্ডলিং করতে পারেন, যা কোডের পুনরাবৃত্তি কমিয়ে দেয় এবং পরিষ্কার করে।
  2. Return Meaningful Error Messages:
    • রেসপন্সে একটি বোধগম্য ত্রুটি বার্তা (error message) পাঠান, যাতে ব্যবহারকারী সমস্যাটি দ্রুত সমাধান করতে পারে।
  3. Handle Specific Exceptions:
    • বিভিন্ন ধরনের exception এর জন্য পৃথক handler তৈরি করুন, যাতে সঠিকভাবে নির্দিষ্ট ত্রুটির জন্য উপযুক্ত রেসপন্স প্রদান করা যায়।
  4. Use ResponseEntity for Flexibility:
    • ResponseEntity ব্যবহার করে, আপনি কাস্টম HTTP status এবং error message সহ রেসপন্স পাঠাতে পারেন।
  5. Log Exceptions:
    • সিস্টেমে হওয়া exception গুলোর লগ তৈরি করুন যাতে সমস্যা ট্র্যাক করা এবং ডিবাগ করা সহজ হয়।

Conclusion

Spring MVC তে Exception Handling অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ব্যবহারকারীর জন্য একটি সুরক্ষিত এবং বোধগম্য অভিজ্ঞতা নিশ্চিত করে। কন্ট্রোলার লেভেল এবং গ্লোবাল লেভেলে exception হ্যান্ডলিংয়ের জন্য Spring MVC অনেক নমনীয়তা প্রদান করে, যা ডেভেলপারদের সহজেই ত্রুটিগুলি পরিচালনা এবং যথাযথ রেসপন্স প্রদান করতে সক্ষম করে। @ExceptionHandler, @ControllerAdvice, ResponseEntity, এবং @ResponseStatus এর মাধ্যমে আমরা Spring MVC তে exception গুলি কার্যকরভাবে হ্যান্ডল করতে পারি।

Content added By
Promotion

Are you sure to start over?

Loading...