SpringBoot优化控制层代码,使用@Valid 对传入的参数进行校验,并自定义一个参数校验注解

在controller层,对数据进行校验首先使用@Valid注解,去到自己定义的和传入参数对应的类中,进行相应的参数要求的校验
在controller接受

 @PostMapping(value = "/login_submit")
    public ResponseResult<Boolean> login_submit(@Valid LoginVo loginVo) {
    
    
        userService.checkLogin(loginVo);
        return ResponseResult.success(true);
    }

进入传入参数对应类的LoginVo中进行校验
需要参数校验依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
import com.example.validator.IsPhone;
import lombok.Data;
import javax.validation.constraints.NotEmpty;

@Data
public class LoginVo {
    
    

    @NotEmpty(message = "手机号不能为空!")//该注解只能验证String
    @IsPhone//check phone
    private String phone;

    @NotEmpty(message = "密码不能为空!")
    private String password;
}

validator中提供了一些校验不能为空、邮箱之类的注解校验
在这里使用放入@IsPhone是一个自己定义的校验手机号的注解
首先要编写这个接口对应的类,然后编写实现具体功能的校验器类,这里具体的校验规则又可以单独抽出一个校验器规则类。
1.自定义接口

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({
    
    ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
        validatedBy = {
    
    IsPhoneValidator.class}
)
public @interface IsPhone {
    
    

    boolean required() default false;
    String message() default "手机号格式错误,请重新输入!";
    Class<?>[] groups() default {
    
    };
    Class<? extends Payload>[] payload() default {
    
    };

}

2.具体检验器实现类

import com.example.util.ValidatorUtil;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class IsPhoneValidator implements ConstraintValidator<IsPhone,String> {
    
    

    private boolean required = false;
    public void initialize(IsPhone constraintAnnotation) {
    
    
        required = constraintAnnotation.required();
    }

    public boolean isValid(String value, ConstraintValidatorContext var2){
    
    
        if(required){
    
    
            return ValidatorUtil.isPhone(value);
        }else {
    
    
            if(StringUtils.isEmpty(value)){
    
    
                return true;
            }else {
    
    
                return ValidatorUtil.isPhone(value);
            }
        }
    }

}

3.校验规则util类

import org.apache.commons.lang3.StringUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValidatorUtil {
    
    
    private static final Pattern phone_patten = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$");
    public static boolean isPhone(String str){
    
    
        if(StringUtils.isEmpty(str)){
    
    
            return false;
        }
        Matcher m = phone_patten.matcher(str);
        return m.matches();
    }
}

猜你喜欢

转载自blog.csdn.net/Wangdiankun/article/details/106176103