返回

SpringBoot 业务校验的正确姿势,老司机亲授!

后端

Spring Boot 中的业务校验

在 Spring Boot 项目中,业务校验是指对用户输入的数据进行检查,确保其符合一定的规则和格式。业务校验可以防止出现数据错误和系统崩溃,从而确保系统的稳定性和可靠性。

Spring Boot 提供了多种方式进行业务校验,包括 Bean Validation、方法参数校验、自定义校验注解等。这些校验方式可以满足不同的校验需求,并可以轻松集成到 Spring Boot 项目中。

Bean Validation

Bean Validation 是 Java EE 6 中引入的一个校验框架,它可以对 Java Bean 的属性进行校验。Bean Validation 提供了一套标准的校验注解,如 @NotNull、@Size、@Pattern 等,这些注解可以用来校验数据的非空性、长度、格式等。

要使用 Bean Validation,需要在项目中引入相应的依赖包,如 hibernate-validator。然后,可以在需要校验的 Java Bean 的属性上添加校验注解。

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {

    @NotNull
    private String username;

    @Size(min = 6, max = 18)
    private String password;

    //省略其他属性和方法
}

在使用了 Bean Validation 之后,Spring Boot 会自动对请求参数进行校验。如果校验不通过,则会抛出异常。

方法参数校验

方法参数校验是指对方法的参数进行校验。方法参数校验可以确保方法的参数符合一定的要求,从而防止出现方法调用错误。

要进行方法参数校验,可以在需要校验的方法的参数上添加校验注解。

import javax.validation.constraints.NotNull;

public class UserService {

    public void createUser(@NotNull User user) {
        //省略其他代码
    }

    //省略其他方法
}

在使用了方法参数校验之后,Spring Boot 会自动对方法的参数进行校验。如果校验不通过,则会抛出异常。

自定义校验注解

有时候,我们需要对数据进行一些自定义的校验。这时,我们可以自定义校验注解来实现。

要自定义校验注解,需要创建一个继承自 ConstraintValidator 接口的类。然后,在该类中实现 isValid() 方法,并在 isValid() 方法中编写校验逻辑。

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class PasswordValidator implements ConstraintValidator<Password, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //校验逻辑
        return true;
    }

}

自定义校验注解完成后,可以在需要校验的属性或方法参数上添加该注解。

import javax.validation.constraints.Password;

public class User {

    @Password
    private String password;

    //省略其他属性和方法
}

在使用了自定义校验注解之后,Spring Boot 会自动对数据进行校验。如果校验不通过,则会抛出异常。

异常处理

在进行业务校验时,可能会出现校验不通过的情况。这时,我们需要对校验不通过的情况进行异常处理。

Spring Boot 提供了多种异常处理方式,如 @ExceptionHandler、@RestControllerAdvice 等。这些异常处理方式可以帮助我们轻松处理校验不通过的异常。

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolationException;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleConstraintViolationException(ConstraintViolationException e) {
        return "数据校验不通过:" + e.getMessage();
    }

    //省略其他异常处理方法
}

在使用了异常处理之后,当校验不通过时,Spring Boot 会自动返回相应的异常信息。

总结

在 Spring Boot 项目中,业务校验是必不可少的。Spring Boot 提供了多种方式进行业务校验,包括 Bean Validation、方法参数校验、自定义校验注解等。这些校验方式可以满足不同的校验需求,并可以轻松集成到 Spring Boot 项目中。

在进行业务校验时,可能会出现校验不通过的情况。这时,我们需要对校验不通过的情况进行异常处理。Spring Boot 提供了多种异常处理方式,如 @ExceptionHandler、@RestControllerAdvice 等。这些异常处理方式可以帮助我们轻松处理校验不通过的异常。