Java Bean Validation Cơ bản

Java Bean Validation Cơ bản

1.Tổng Quan

Trong bài viết này chúng ta sẽ tìm hiểu về validating a Java bean cơ bản với framwork tiêu chuẩn - JSR 380 , và cũng được biết đến là Bean Validation 2.0. Validate dữ liệu đầu vào là một phần yêu cầu chung trong hầu hết ứng dụng và Java Bean Validation framework trở thành tiêu chuẩn thực tế cho việc handling loại logic này.

2.JSR 380

JSR 380 là một đặc điểm kĩ thuật của java api cho bean validation , một phần của javaEE vaf javaSE,Đảm bảo rằng các thuộc tính của bean đáp ứng tiêu chuẩn cụ thể .sử dụng annotations như @NotNull,@Min and @Max. Phiên bản này yêu cầu java 8 hoặc cao hơn và nhưng chức năng mới đã được thêm vào java 8 như kiểu annotations,support nhiều mới như Optional và LocalDate Để biết thêm thông tin hãy đọc thêm https://jcp.org/en/jsr/detail?id=380

3.Dependencies

The validation - api dependency chứa validation APIs cụ thể:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>

3.2 Sử dụng Hibernate Validator

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.2.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.0.2.Final</version>
</dependency>

4. Sử dụng Validation Annotations

Chúng ta sử dụng user bean là ví dụ chính ở đây và làm việc trên một vài validtion đơn giản:

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
 
public class User {
 
    @NotNull(message = "Name cannot be null")
    private String name;
 
    @AssertTrue
    private boolean working;
 
    @Size(min = 10, max = 200, message 
      = "About Me must be between 10 and 200 characters")
    private String aboutMe;
 
    @Min(value = 18, message = "Age should not be less than 18")
    @Max(value = 150, message = "Age should not be greater than 150")
    private int age;
 
    @Email(message = "Email should be valid")
    private String email;
 
    // standard setters and getters 
}

Tất cả các annotations đã được sử dụng trong ví dụ :

@NotNull :Giá trị thuộc tính annotated là not null

@AssertTrue:Giá trị thuộc tính annotated là true

@Size : Giá trị thuộc tính annotated có size nằm giữa thuôc tính min và max có thể applied cho thuôc tính String ,Map,Array

@Min : Giá trị thuôc tính annotated có giá trị không nhỏ hơn thộc tính giá trị

@Max : Giá trị thuôc tính annotated có giá trị không lớn hơn thộc tính giá trị

@Email :xác thực rằng thuộc tính annotated là địa chỉ mail hợp lệ

@NotEmpty : Giá trị thuộc tính annotated là not null hoặc rỗng có thể applied cho những giá trị String ,Map,Array

@NotBlank : Chỉ có thể appkied cho giá trị text và Giá trị thuộc tính annotated là not null ,không khoảng trắng

@Positive@PositiveOrZero :Apply cho kiểu số và chúng phải là số dương hoặc bao gôm cả số 0

@Negative@NegativeOrZero :Apply cho kiểu số và chúng phải là số âm hoặc bao gôm cả số 0

@Past and @PastOrPresent : Giá trị date là năm trong quá khứ hoặc quá khứ bao gôm cả hiện tại có thể applied cho kiểu date

@future@FutureOrPresent : Giá trị date là trong tương lại hoặc tương lại bao gôm cả hiện tại

Validation annotations có thể applied cho phân tử của một collection:

List<@NotBlank String> preferences;

Trong trường họp này bất kỳ giá trị thêm vào list sẽ được validated

Nó cũng hỗ trợ cho kiểu optional trong java 8:

private LocalDate dateOfBirth;
 
public Optional<@Past LocalDate> getDateOfBirth() {
    return Optional.of(dateOfBirth);
}

5.Lập trình Validation

Một vài framworks - như spring framwork có nhưng cách đơn giản để kích hoạt qúa trình validation chỉ bằng annotations.

Chúng ta hãy thử đi theo con đường thủ công , cài đặt mọi thứ :

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Để validate một bean chúng ta phải có validate object đầu tiên, constructed sử dụng a ValidatorFactory

5.1. Định nghĩa bean

Bây giờ chúng ta tạo một user với user name có giá trị null:

User user = new User();
user.setWorking(true);
user.setAboutMe("Its all about me!");
user.setAge(50);

5.2.Validate the bean

Bây giờ chúng ta có validator Chúng ta có thể validate qua validate method .Bất kỳ vi phạm sự hạn chế nào trong user objecct sẽ được trả về một Set.

Set<ConstraintViolation<User>> violations = validator.validate(user);

Lặp các vi phạm Chúng ta có thể lấy ra tất cả thông báo vi phạm bằng cách sử ụng phương thức getMessage.

for (ConstraintViolation<User> violation : violations) {
    log.error(violation.getMessage()); 
}

Trong ví dụ trên (ifNameIsNull_nameValidationFails), Set sẽ chứa ConstraintViolation với thông báo Name cannot be null

6.Kết luận

Bài hướng dẫn này tập trung vào class đơn giản thông qua tiêu chuẩn của java validation API và minh họa cơ bản bean validation sử dụng javax.validation annotations và api Tất cả bạn có thể tìm ở đây : https://github.com/eugenp/tutorials/tree/master/javaxval