Java Technologies Custom Exception তৈরি এবং Handle করা গাইড ও নোট

291

স্প্রিং বুট (Spring Boot) অ্যাপ্লিকেশনে কাস্টম এক্সসেপশন তৈরি এবং হ্যান্ডল করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এর মাধ্যমে আপনি অ্যাপ্লিকেশনটির ত্রুটিগুলিকে আরও স্পষ্টভাবে এবং কার্যকরভাবে পরিচালনা করতে পারবেন। কাস্টম এক্সসেপশন ব্যবহার করার মাধ্যমে আপনার কোড আরও পরিষ্কার ও রক্ষণাবেক্ষণযোগ্য হয়।


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

স্প্রিং বুটে কাস্টম এক্সসেপশন তৈরি করার জন্য, আপনাকে একটি নতুন ক্লাস তৈরি করতে হবে যা সাধারণত RuntimeException বা Exception থেকে এক্সটেন্ড করে। এভাবে আপনি নিজের এক্সসেপশন তৈরি করতে পারবেন এবং এটি প্রয়োজনে কাস্টম মেসেজসহ পরিচালনা করতে পারবেন।

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

public class ResourceNotFoundException extends RuntimeException {
    private String resourceName;
    private String fieldName;
    private Object fieldValue;

    public ResourceNotFoundException(String resourceName, String fieldName, Object fieldValue) {
        super(String.format("%s not found with %s : '%s'", resourceName, fieldName, fieldValue));
        this.resourceName = resourceName;
        this.fieldName = fieldName;
        this.fieldValue = fieldValue;
    }

    public String getResourceName() {
        return resourceName;
    }

    public String getFieldName() {
        return fieldName;
    }

    public Object getFieldValue() {
        return fieldValue;
    }
}

এই উদাহরণে, আমরা একটি ResourceNotFoundException কাস্টম এক্সসেপশন তৈরি করেছি, যা একটি নির্দিষ্ট রিসোর্স যেমন "User" বা "Product" এর জন্য একটি ফিল্ড এবং তার মান গ্রহণ করে। যখন কোনো রিসোর্স খুঁজে পাওয়া না যায়, তখন এই এক্সসেপশনটি থ্রো হবে।


কাস্টম এক্সসেপশন হ্যান্ডলিং

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

কাস্টম এক্সসেপশন হ্যান্ডলার তৈরি করা:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorDetails> handleResourceNotFoundException(ResourceNotFoundException ex) {
        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), ex.getResourceName(), ex.getFieldName(), ex.getFieldValue());
        return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorDetails> handleGlobalException(Exception ex) {
        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), "Unknown", "Unknown", "Unknown");
        return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

এখানে, @ExceptionHandler অ্যানোটেশনটি ResourceNotFoundException এবং অন্যান্য সাধারণ এক্সসেপশন হ্যান্ডল করার জন্য ব্যবহার করা হয়েছে। যখন কোনো ResourceNotFoundException থ্রো হবে, তখন এটি কাস্টম মেসেজসহ ErrorDetails অবজেক্ট তৈরি করে ক্লায়েন্টকে পাঠানো হবে।

ErrorDetails ক্লাস তৈরি করা:

public class ErrorDetails {
    private Date timestamp;
    private String message;
    private String resourceName;
    private String fieldName;
    private Object fieldValue;

    public ErrorDetails(Date timestamp, String message, String resourceName, String fieldName, Object fieldValue) {
        this.timestamp = timestamp;
        this.message = message;
        this.resourceName = resourceName;
        this.fieldName = fieldName;
        this.fieldValue = fieldValue;
    }

    // Getters and Setters
}

এই ErrorDetails ক্লাসে ত্রুটির সময়, মেসেজ, রিসোর্সের নাম, ফিল্ডের নাম এবং ফিল্ডের মান সংরক্ষিত থাকবে, যা ক্লায়েন্টকে পাঠানো হবে।


কাস্টম এক্সসেপশন থ্রো করা

কাস্টম এক্সসেপশন থ্রো করার জন্য আপনাকে throw কীওয়ার্ড ব্যবহার করতে হবে। উদাহরণস্বরূপ, আপনি যদি একটি রিসোর্স না পেয়ে যান, তবে ResourceNotFoundException থ্রো করতে পারেন।

কাস্টম এক্সসেপশন থ্রো করার উদাহরণ:

public User getUserById(Long userId) {
    User user = userRepository.findById(userId).orElse(null);
    if (user == null) {
        throw new ResourceNotFoundException("User", "id", userId);
    }
    return user;
}

এখানে, getUserById মেথডে যদি ইউজার না পাওয়া যায়, তবে ResourceNotFoundException কাস্টম এক্সসেপশন থ্রো করা হবে, এবং এটি গ্লোবাল এক্সসেপশন হ্যান্ডলার দ্বারা হ্যান্ডল হবে।


কাস্টম এক্সসেপশন কাস্টমাইজেশন

স্প্রিং বুটের কাস্টম এক্সসেপশন আরো কাস্টমাইজ করা যেতে পারে যেমন:

  • বিভিন্ন HTTP স্টেটাস কোড ব্যবহার করা
  • এক্সসেপশন মেসেজের মধ্যে আরও বিস্তারিত তথ্য প্রদান করা
  • এক্সসেপশনগুলোকে নির্দিষ্ট আর্কিটেকচার বা প্রোটোকল অনুযায়ী আউটপুট করা

উপসংহার

স্প্রিং বুটে কাস্টম এক্সসেপশন তৈরি এবং হ্যান্ডল করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনের ত্রুটিগুলিকে স্পষ্টভাবে এবং কার্যকরভাবে পরিচালনা করতে সাহায্য করে। কাস্টম এক্সসেপশন এবং গ্লোবাল এক্সসেপশন হ্যান্ডলিংয়ের মাধ্যমে আপনি কোডের গঠন উন্নত করতে পারেন এবং ডিবাগিং প্রক্রিয়াকে আরও সহজ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...