在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();
}
}