集成JSR303
1.引入依赖
<!-- JSR303依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在需要进行校验的类的对象上加上注解@Valid
/**
* @param loginVo 建立的form表单传来参数的Vo
* @return 如果参数校验都没问题,返回TRUE
*/
@RequestMapping("do_login")
@ResponseBody
public Result<Boolean> doLogin(@Valid LoginVo loginVo) {
log.info(loginVo.toString());
//登录
miaoShaUserService.login(loginVo);
return Result.success(true);
}
3.在类的各个字段上加上指定注解
public class LoginVo {
//JSR303校验
@NotNull
@IsMobile
private String mobile;
@NotNull
@Length(min = 32)
private String password;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginVo{" +
"mobile='" + mobile + '\'' +
", password='" + password + '\'' +
'}';
}
}
4.自定义JSR303注解
以判断一个字符串是否为电话号码为例:
package com.yang.validator;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.constraints.NotNull;
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 = {IsMobileValidator.class}
)
public @interface IsMobile {
boolean required() default true;
String message() default "手机号码格式有误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package com.yang.validator;
import com.mysql.cj.util.StringUtils;
import com.yang.util.ValidatorUtil;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Validator;
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {
private boolean required = false;
/**
* 初始化方法
*
* @param constraintAnnotation 拿到注解
*/
@Override
public void initialize(IsMobile constraintAnnotation) {
required = constraintAnnotation.required();
}
/**
*
* @param value 电话号码
* @param constraintValidatorContext
* @return 返回一个boolean对象
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (required) {
return ValidatorUtil.isMobile(value);
} else {
if (StringUtils.isNullOrEmpty(value)) {
return true;
} else {
return ValidatorUtil.isMobile(value);
}
}
}
}