Java根据需要再Validated实现流程

介绍

在Java开发中,我们经常需要对输入参数进行校验,以确保数据的合法性和可靠性。为了简化校验的代码编写和维护,我们可以使用javax.validation包提供的@Validated注解和Spring框架提供的校验工具来实现校验功能。

本文将详细介绍如何使用Java根据需要再Validated,帮助刚入行的小白快速掌握这一技能。

流程图

flowchart TD
    A[开始] --> B[定义输入参数]
    B --> C[使用@Validated注解]
    C --> D[编写校验规则]
    D --> E[调用校验工具]
    E --> F[处理校验结果]
    F --> G[校验通过]
    F --> H[校验失败]
    H --> I[返回错误信息]
    G --> J[执行业务逻辑]
    J --> K[返回结果]
    K --> L[结束]

步骤说明

步骤 详细说明
1. 定义输入参数 需要校验的实体类或方法参数
2. 使用@Validated注解 在需要校验的参数前添加@Validated注解
3. 编写校验规则 在实体类的字段上使用JSR-303注解或自定义注解定义校验规则
4. 调用校验工具 在需要校验的方法中,使用javax.validation.Validator进行校验
5. 处理校验结果 判断校验结果,根据需要执行相应的业务逻辑
6. 校验通过 继续执行业务逻辑
7. 校验失败 返回错误信息并终止执行

代码实现

定义输入参数

首先,我们需要定义一个包含需要校验字段的实体类。例如,我们定义一个User类,包含name和age字段。

public class User {
    @NotBlank(message = "姓名不能为空")
    private String name;
    
    @Min(value = 18, message = "年龄不能小于18岁")
    private Integer age;
    
    // 省略getter和setter方法
}

使用@Validated注解

在需要校验的方法参数前添加@Validated注解,告诉Spring框架对该参数进行校验。

public void createUser(@Validated User user) {
    // ...
}

编写校验规则

在实体类的字段上使用JSR-303注解或自定义注解定义校验规则。例如,我们使用@NotBlank@Min注解分别校验name和age字段。

调用校验工具

在需要校验的方法中,使用javax.validation.Validator进行校验。

@Autowired
private Validator validator;

public void createUser(@Validated User user) {
    Set<ConstraintViolation<User>> violations = validator.validate(user);
    if (!violations.isEmpty()) {
        // 处理校验失败的情况
    }
    // 处理校验成功的情况
}

处理校验结果

判断校验结果,根据需要执行相应的业务逻辑。如果校验失败,可以返回错误信息;如果校验通过,可以继续执行后续的业务逻辑。

if (!violations.isEmpty()) {
    // 校验失败
    for (ConstraintViolation<User> violation : violations) {
        System.out.println(violation.getMessage());
    }
    // 返回错误信息并终止执行
    return;
}

// 校验通过,继续执行业务逻辑

完整示例代码

import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

@Service
@Validated
public class UserService {
    @Autowired
    private Validator validator;
    
    public void createUser(@Validated User user) {
        Set<ConstraintViolation<User>> violations = validator.validate(user);
        if (!violations.isEmpty()) {
            // 处理校验失败的情况
            for (Constraint