التحقق من صحة البيانات في Java: دليل شامل للمكتبات والأدوات
التحقق من صحة البيانات هو أحد الجوانب الرئيسية لتطوير تطبيقات Java الموثوقة. بدونه، لا يمكن ضمان صحة البيانات المدخلة، أو الحماية من إدخال المستخدم غير الصحيح، أو أخطاء التكامل مع الأنظمة الخارجية. في هذه المقالة، سنستعرض المكتبات والمناهج الرئيسية للتحقق من صحة البيانات في Java، بدءًا من المعيار Bean Validation وصولاً إلى الحلول الحديثة.
لماذا نحتاج إلى التحقق من صحة البيانات؟
يتيح التحقق من صحة البيانات:
- استبعاد البيانات غير الصحيحة في مرحلة مبكرة
- تقليل عدد الأخطاء في منطق الأعمال
- زيادة أمان التطبيق (الحماية من حقن SQL، XSS)
- تحسين تجربة المستخدم (رسائل خطأ واضحة)
1. Jakarta Bean Validation (المعروف سابقًا باسم JSR 380)
هذا هو معيار Java للتحقق من صحة الكائنات باستخدام التعليقات التوضيحية. التنفيذ الأساسي هو Hibernate Validator. مدعوم بدءًا من Jakarta EE 9 و Java SE 8+.
التعليقات التوضيحية الرئيسية
@NotNull— لا يمكن أن تكون القيمة فارغة (null)@NotEmpty— لا يمكن أن تكون السلسلة النصية أو المجموعة أو المصفوفة فارغة@Size(min, max)— تحديد طول السلسلة النصية أو حجم المجموعة@Pattern(regexp)— التحقق باستخدام التعبير النمطي@Email— عنوان بريد إلكتروني صحيح@Min/@Max— الحدود العددية
مثال على الاستخدام
import jakarta.validation.constraints.*;
public class User { @NotNull(message = "الاسم لا يمكن أن يكون فارغًا (null)") @Size(min = 2, max = 50, message = "يجب أن يحتوي الاسم على ما بين 2 و 50 حرفًا") private String name;
@Email(message = "تنسيق البريد الإلكتروني غير صحيح") @NotEmpty(message = "البريد الإلكتروني إلزامي") private String email;
@Min(value = 18, message = "يجب أن لا يقل العمر عن 18") @Max(value = 120, message = "لا يمكن أن يتجاوز العمر 120") private int age;
// دوال الحصول (getters) والتعيين (setters)}تشغيل التحقق من الصحة
import jakarta.validation.*;import java.util.Set;
public class ValidationExample { public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();
User user = new User(); user.setName("A"); // اسم قصير جدًا user.setEmail("invalid-email"); user.setAge(15); // أقل من 18
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — تنفيذ موسع
Hibernate Validator هو التنفيذ المرجعي لـ Bean Validation. يضيف إمكانيات إضافية:
- تعليقات توضيحية مخصصة للتحقق من الصحة
- مجموعات التحقق من الصحة (لسيناريوهات مختلفة)
- دعم
@ScriptAssertللفحوصات المعقدة
مثال على تعليق توضيحي مخصص
import jakarta.validation.*;import java.lang.annotation.*;
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PasswordValidator.class)public @interface ValidPassword { String message() default "يجب أن تحتوي كلمة المرور على أحرف وأرقام"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}public class PasswordValidator implements ConstraintValidator<ValidPassword, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) return false; return value.matc