Java Beans-এ Custom Validation Logic যোগ করা একটি সাধারণ এবং প্রয়োজনীয় কার্যকলাপ, বিশেষ করে যখন আপনি অবজেক্টের ডেটার সঠিকতা বা ভালোরতা যাচাই করতে চান। Java Beans এ কাস্টম ভ্যালিডেশন অ্যাড করার জন্য আপনি getter/setter মেথডে কাস্টম লজিক ব্যবহার করতে পারেন অথবা validation frameworks যেমন Hibernate Validator বা JSR-303 ব্যবহার করতে পারেন। তবে এখানে আমরা Apache Commons BeanUtils এবং সাধারণ Java কোড ব্যবহার করে কাস্টম ভ্যালিডেশন যুক্ত করার পদ্ধতি আলোচনা করব।
1. Getter/Setter মেথডে Custom Validation
একটি সাধারণ Java Bean-এ কাস্টম ভ্যালিডেশন যুক্ত করতে, আপনি setter মেথডের মধ্যে লজিক লিখে প্রপার্টির মান যাচাই করতে পারেন। যদি মানটি বৈধ না হয়, আপনি Exception অথবা Error ফেলে দিতে পারেন।
উদাহরণ: Bean-এর মধ্যে Custom Validation Logic
public class Person {
private String name;
private int age;
// Constructor, getter, and setter methods
public Person() {}
public Person(String name, int age) {
setName(name);
setAge(age);
}
public String getName() {
return name;
}
// Setter with validation logic
public void setName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Name cannot be empty");
}
this.name = name;
}
public int getAge() {
return age;
}
// Setter with validation logic
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("Age must be positive and greater than zero");
}
this.age = age;
}
}ব্যাখ্যা:
setName()এবংsetAge()মেথডে কাস্টম ভ্যালিডেশন যুক্ত করা হয়েছে।setName()-এ যদি নাম null বা খালি (empty) থাকে, তাহলে একটি IllegalArgumentException ফেলা হবে।setAge()-এ যদি বয়স শূন্য বা ঋণাত্মক হয়, তাহলে একটি IllegalArgumentException ফেলা হবে।- এই ধরনের কাস্টম ভ্যালিডেশন মেথডের মাধ্যমে আপনি Bean-এ প্রপার্টি সেট করার আগে সেগুলি যাচাই করতে পারেন।
2. BeanUtils এবং Custom Validation
Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে ডেটা কপি এবং টাইপ কনভার্সন করার সময় কাস্টম ভ্যালিডেশন যুক্ত করার জন্য, আপনি populate() মেথড বা copyProperties() ব্যবহার করতে পারেন এবং সেই সময় setter মেথডের মাধ্যমে ভ্যালিডেশন করতে পারেন।
উদাহরণ: BeanUtils ব্যবহার করে Custom Validation
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtilsValidationExample {
public static void main(String[] args) {
try {
// Create a Map with invalid data
Map<String, String> personData = new HashMap<>();
personData.put("name", ""); // Invalid name
personData.put("age", "-5"); // Invalid age
Person person = new Person();
// Attempt to populate Person object using invalid data
try {
BeanUtils.populate(person, personData);
} catch (Exception e) {
System.out.println("Validation failed: " + e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Getter and setter methods
public String getName() {
return name;
}
public void setName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Name cannot be empty");
}
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age <= 0) {
throw new IllegalArgumentException("Age must be positive and greater than zero");
}
this.age = age;
}
}ব্যাখ্যা:
- এখানে আমরা
BeanUtils.populate()মেথড ব্যবহার করেPersonBean-এ ডেটা populate করছি। - তবে,
setName()এবংsetAge()মেথডে কাস্টম ভ্যালিডেশন লজিক রয়েছে, যা invalid data এ IllegalArgumentException ছুঁড়ে দেয়। - যদি কোন মান অপর্যাপ্ত বা ভুল থাকে, তাহলে Exception ছুঁড়ে দেয় এবং ভ্যালিডেশন ব্যর্থ হবে।
3. JSR-303 Bean Validation (Hibernate Validator)
যদি আপনি একটি আরও স্ট্যান্ডার্ড পদ্ধতি চান, তবে আপনি JSR-303 বা Hibernate Validator ব্যবহার করতে পারেন। Hibernate Validator একটি শক্তিশালী ভ্যালিডেশন ফ্রেমওয়ার্ক যা annotation-based validation প্রদান করে। এর মাধ্যমে আপনি Bean এর প্রপার্টি বা ফিল্ডের জন্য validation constraints সেট করতে পারেন।
উদাহরণ: Hibernate Validator ব্যবহার করে Custom Validation
import javax.validation.constraints.*;
import org.hibernate.validator.constraints.Length;
public class Person {
@NotEmpty(message = "Name cannot be empty")
private String name;
@Min(value = 1, message = "Age must be greater than zero")
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;
}
}ব্যাখ্যা:
@NotEmptyannotation ব্যবহার করা হয়েছে name ফিল্ডের জন্য, যাতে ফিল্ডটি খালি না থাকে।@Minannotation ব্যবহার করা হয়েছে age ফিল্ডের জন্য, যাতে বয়স ১ বা তার বেশি হতে হবে।- আপনি Hibernate Validator ব্যবহার করে এই ধরনের validation ফিচার অ্যাড করতে পারেন এবং Bean Validation API ব্যবহার করে সেগুলি কার্যকর করতে পারেন।
Validation চালানো:
import javax.validation.*;
import java.util.Set;
public class ValidatorExample {
public static void main(String[] args) {
try {
Person person = new Person();
person.setName(""); // Invalid
person.setAge(-5); // Invalid
// Create a validator factory and validator
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// Validate the person object
Set<ConstraintViolation<Person>> violations = validator.validate(person);
for (ConstraintViolation<Person> violation : violations) {
System.out.println(violation.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
@NotEmptyএবং@Minannotations এর মাধ্যমে Person ক্লাসের প্রপার্টি যাচাই করা হচ্ছে।- Validator API ব্যবহার করে, আপনি ConstraintViolation এর মাধ্যমে কাস্টম ভ্যালিডেশন ত্রুটি বার্তা দেখতে পারবেন।
সারাংশ
- Getter/Setter মেথডে Custom Validation: আপনি setter মেথডে কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন, যেমন একটি প্রপার্টি যদি অবৈধ হয়, তাহলে Exception ছুড়ে দিন।
- BeanUtils ব্যবহার করে Validation: BeanUtils.populate() মেথড ব্যবহার করে Map থেকে Bean populate করার সময়, getter/setter মেথডের মাধ্যমে ভ্যালিডেশন লজিক কার্যকর করা সম্ভব।
- JSR-303 / Hibernate Validator: annotation-based validation ব্যবহার করে আপনি Java Beans-এ ভ্যালিডেশন যুক্ত করতে পারেন, যা একটি স্ট্যান্ডার্ড এবং শক্তিশালী পদ্ধতি।
Read more