Data Validation in Java: Overview of Key Libraries and Tools
Data validation is one of the most critical stages in developing any application. Incorrect or malicious data entering the system can lead to errors, vulnerabilities, and data loss. In Java, there are several powerful libraries that help automate and standardize this process. In this article, we will review the main validation tools, their features, and usage examples.
1. Jakarta Bean Validation (formerly JSR 380 / Bean Validation 2.0)
This is the de facto standard for validating Java objects. It defines a set of annotations that can be placed on fields, methods, and classes. The most popular implementation is Hibernate Validator.
Key Annotations:
@NotNull— checks that the value is not null.@NotEmpty— for strings, collections, or arrays: not null and not empty.@NotBlank— string is not null and contains at least one non-whitespace character.@Size(min, max)— restricts string length or collection size.@Min / @Max— numeric boundaries.@Pattern(regexp)— validation against a regular expression.@Email— email format validation.
Usage Example:
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "Name cannot be empty") private String name;
@Email(message = "Invalid email") @NotBlank private String email;
@Min(18) @Max(120) private int age;
// getters and setters}How to Perform Validation:
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(""); // empty name 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()); } }}Pros: standardized approach, integration with Spring and Jakarta EE, support for custom annotations.
2. Apache Commons Validator
A library from Apache providing a set of ready-made validators for common data types: email, URL, credit cards, IP addresses, etc. Unlike Bean Validation, there are no annotations — validation is done through static method calls.
Example:
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) }}Pros: simple integration, no configuration required, suitable for one-off checks.
3. OVal (Object Validation Framework)
A flexible library supporting both annotations and programmatic configuration. Allows defining complex validation rules, including cross-field and dependency checks.
Example with Annotations:
import net.sf.oval.constraint.*;
public class Order { @NotNull Also in library
JWT Tokens in Go (Golang): Creation and Verification with Examples
Cryptography in Kotlin: Encryption and Hashing
Multer for JavaScript (Node.js): Complete Guide with Examples
JSON Processing in C# (.NET): Complete Guide to Newtonsoft.Json and System.Text.Json