التحقق من صحة البيانات في Java: نظرة عامة على المكتبات والأدوات الرئيسية
التحقق من صحة البيانات هو أحد أهم مراحل تطوير أي تطبيق. يمكن أن تؤدي البيانات غير الصحيحة أو الضارة التي تدخل النظام إلى أخطاء وثغرات أمنية وفقدان للبيانات. في Java، توجد عدة مكتبات قوية تساعد في أتمتة وتوحيد هذه العملية. في هذه المقالة، سنستعرض أدوات التحقق الرئيسية وخصائصها وأمثلة على استخدامها.
1. Jakarta Bean Validation (المعروف سابقًا بـ JSR 380 / Bean Validation 2.0)
هذا هو المعيار الفعلي للتحقق من صحة كائنات Java. يحدد مجموعة من التعليقات التوضيحية (annotations) التي يمكن وضعها على الحقول والطرق والفئات. التنفيذ الأكثر شيوعًا هو Hibernate Validator.
التعليقات التوضيحية الرئيسية:
@NotNull— يتحقق من أن القيمة ليست null.@NotEmpty— للسلاسل النصية أو المجموعات أو المصفوفات: ليست null وليست فارغة.@NotBlank— السلسلة النصية ليست null وتحتوي على حرف واحد غير مسافة على الأقل.@Size(min, max)— يحدد طول السلسلة النصية أو حجم المجموعة.@Min / @Max— حدود رقمية.@Pattern(regexp)— التحقق باستخدام تعبير منتظم.@Email— التحقق من تنسيق البريد الإلكتروني.
مثال على الاستخدام:
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "الاسم لا يمكن أن يكون فارغًا") private String name;
@Email(message = "بريد إلكتروني غير صحيح") @NotBlank private String email;
@Min(18) @Max(120) private int age;
// الدوال المساعدة (getters and 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(""); // اسم فارغ user.setEmail("invalid"); user.setAge(150);
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> v : violations) { System.out.println(v.getPropertyPath() + ": " + v.getMessage()); } }}المزايا: نهج موحد، تكامل مع Spring و Jakarta EE، دعم التعليقات التوضيحية المخصصة.
2. Apache Commons Validator
مكتبة من Apache توفر مجموعة من أدوات التحقق الجاهزة لأنواع البيانات الشائعة: البريد الإلكتروني، URL، بطاقات الائتمان، عناوين IP، إلخ. على عكس Bean Validation، لا توجد تعليقات توضيحية هنا — يتم التحقق من خلال استدعاء دوال ثابتة.
مثال:
import org.apache.commons.validator.routines.*;
public class CommonsValidatorExample { public static void main(String[] args) { EmailValidator emailValidator = EmailValidator.getInstance(); System.out.println(emailValidator.isValid("test@example.com")); // true
UrlValidator urlValidator = new UrlValidator(); System.out.println(urlValidator.isValid("https://pythonlib.ru")); // true
CreditCardValidator ccValidator = CreditCardValidator.getInstance(); System.out.println(ccValidator.isValid("4111111111111111")); // true (Visa) }}المزايا: تكامل بسيط، لا يتطلب إعدادات، مناسب للفحوصات الفردية.
3. OVal (Object Validation Framework)
مكتبة مرنة تدعم كلاً من التعليقات التوضيحية والتكوين البرمجي. تسمح بتعريف قواعد تحقق معقدة، بما في ذلك التحقق عبر الحقول والتبعيات.
مثال مع التعليقات التوضيحية:
import net.sf.oval.constraint.*;
public class Order { @NotNull