Bean Validation হল একটি প্রক্রিয়া যা Java Bean-এ থাকা প্রপার্টিগুলির মান যাচাই করার জন্য ব্যবহৃত হয়। এটি সাধারণত ফর্ম ডেটা, ইউজার ইনপুট, বা অন্যান্য ডেটা যেগুলি Bean এর প্রপার্টির মাধ্যমে ম্যানেজ করা হয়, সেগুলির জন্য ব্যবহৃত হয়। Bean Validation এর মাধ্যমে নিশ্চিত করা হয় যে Bean এর প্রপার্টি গুলি সঠিক এবং প্রয়োজনীয় শর্তগুলি পূরণ করছে।
Java Bean Validation সাধারণত দুটি স্তরে কাজ করে:
- সামান্য যাচাই (Simple Validation): প্রপার্টি মানের সাধারণ বৈধতা (যেমন,
nullচেক বা মিনিমাম/ম্যাক্সিমাম ভ্যালু যাচাই করা)। - কাস্টম যাচাই (Custom Validation): যখন সাধারণ যাচাইয়ের বাইরে কিছু বিশেষ যাচাই প্রয়োজন হয়, যেমন কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করা।
Java Bean Validation করতে আমরা সাধারণত Javax Validation API (JSR-303/JSR-380) ব্যবহার করি, যার মধ্যে বিভিন্ন বিল্ট-ইন কনস্ট্রেইন্ট (Constraint) এন্ড অ্যাট্রিবিউট রয়েছে, যেমন @NotNull, @Size, @Min, @Max, ইত্যাদি।
1. Java Bean Validation API
Java Bean Validation API (JSR-303) একটি নির্দিষ্ট স্পেসিফিকেশন যা Bean প্রপার্টির বৈধতা যাচাই করার জন্য ব্যবহৃত হয়। @Valid এবং বিভিন্ন কনস্ট্রেইন্ট অ্যানোটেশন ব্যবহার করে Bean এর প্রপার্টি গুলির যাচাই করা যায়।
Bean Validation এর সাধারণ ধাপ:
- অ্যানোটেশন ব্যবহার করা: Bean-এর প্রপার্টিতে কনস্ট্রেইন্ট অ্যাপ্লাই করতে আপনি বিভিন্ন অ্যানোটেশন ব্যবহার করেন (যেমন
@NotNull,@Size,@Emailইত্যাদি)। - Validator ব্যবহার করা: একটি
Validatorঅবজেক্ট ব্যবহার করে Bean বা প্রপার্টি যাচাই করা হয়। - ভ্যালিডেশন ফলাফল: যদি Bean এর প্রপার্টি কোনো কনস্ট্রেইন্ট ভঙ্গ করে, তবে এটি একটি ভ্যালিডেশন ফলাফল প্রদান করে।
2. Bean Validation উদাহরণ
উদাহরণ ১: Bean Validation এর জন্য অ্যানোটেশন ব্যবহার
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Min;
public class Person {
@NotNull(message = "Name cannot be null")
@Size(min = 2, max = 50, message = "Name should be between 2 and 50 characters")
private String name;
@Min(value = 18, message = "Age must be at least 18")
private int age;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- @NotNull: এটি নিশ্চিত করে যে
nameপ্রপার্টি null না হয়। - @Size: এটি নিশ্চিত করে যে
nameপ্রপার্টি ২ থেকে ৫০ ক্যারেক্টারের মধ্যে থাকবে। - @Min: এটি নিশ্চিত করে যে
ageপ্রপার্টির মান ১৮ অথবা তার বেশি হতে হবে।
উদাহরণ ২: Bean Validation ফলাফল যাচাই করা
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;
public class BeanValidationExample {
public static void main(String[] args) {
// Create a new Person object
Person person = new Person();
person.setName("J"); // Invalid name
person.setAge(17); // Invalid age
// Create a ValidatorFactory
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Validate the person object
Set<ConstraintViolation<Person>> violations = validator.validate(person);
// Check if any violations exist
if (!violations.isEmpty()) {
// Print violation messages
for (ConstraintViolation<Person> violation : violations) {
System.out.println(violation.getMessage());
}
} else {
System.out.println("No violations, the bean is valid.");
}
}
}ব্যাখ্যা:
Validator: Bean-এর প্রপার্টি যাচাই করার জন্যValidatorঅবজেক্ট তৈরি করা হয়েছে।ConstraintViolation: ভ্যালিডেশন ফলাফল একটি সেট আকারে পাওয়া যায়, যেখানে প্রতিটি ভায়োলেশন বার্তা থাকে।
আউটপুট:
Name should be between 2 and 50 characters
Age must be at least 18এখানে, name এবং age প্রপার্টির ভ্যালিডেশন ভাঙছে, তাই দুটি ভায়োলেশন বার্তা দেখা যাবে।
3. কাস্টম Bean Validation
যদি আপনি কিছু কাস্টম ভ্যালিডেশন করতে চান, যেমন PhoneNumber ভ্যালিডেশন বা কোনো নির্দিষ্ট শর্তে প্রপার্টি যাচাই, তাহলে Custom Validator তৈরি করা যায়।
কাস্টম ভ্যালিডেশন উদাহরণ:
- Custom Annotation তৈরি করা:
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(validatedBy = PhoneNumberValidator.class)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidPhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}- Custom Validator তৈরি করা:
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PhoneNumberValidator implements ConstraintValidator<ValidPhoneNumber, String> {
@Override
public void initialize(ValidPhoneNumber constraintAnnotation) {}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true; // assuming null is valid
}
// Basic phone number validation (just an example)
return value.matches("\\d{10}");
}
}- Custom Validator ব্যবহার করা:
public class Person {
@ValidPhoneNumber
private String phoneNumber;
// Getter and Setter methods
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}ব্যাখ্যা:
- Custom Annotation:
@ValidPhoneNumberকাস্টম অ্যানোটেশনটি ব্যবহার করেPhoneNumberValidatorক্লাসে ফোন নম্বর যাচাই করা হয়েছে। - PhoneNumberValidator: এই ক্লাসে কাস্টম লজিক ব্যবহার করে ফোন নম্বর যাচাই করা হয়।
সারাংশ
- Java Bean Validation হল একটি শক্তিশালী উপায় Java Bean-এর প্রপার্টির বৈধতা যাচাই করার জন্য। এটি সাধারণত
@NotNull, @Size, @Min` এর মতো বিভিন্ন বিল্ট-ইন অ্যানোটেশন ব্যবহার করে করা হয়। - Bean Validation API (JSR 303/JSR 380) ব্যবহার করে আপনি Bean প্রপার্টির জন্য বিভিন্ন কনস্ট্রেইন্ট অ্যাপ্লাই করতে পারেন এবং
Validatorক্লাস ব্যবহার করে সেটি যাচাই করতে পারেন। - আপনি যদি কাস্টম ভ্যালিডেশন করতে চান, তবে Custom Annotations এবং Constraint Validators তৈরি করে নির্দিষ্ট শর্তে ডেটা যাচাই করা সম্ভব।
Read more