@AssertTrue //用于boolean字段,该字段只能为true
@AssertFalse//该字段的值只能为false
@CreditCardNumber//对信用卡号进行一个大致的验证
@DecimalMax//只能小于或等于该值
@DecimalMin//只能大于或等于该值
@Digits(integer=2,fraction=20)//检查是否是一种数字的整数、分数,小数位数的数字。
@Email//检查是否是一个有效的email地址
@Future//检查该字段的日期是否是属于将来的日期
@Length(min=,max=)//检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max//该字段的值只能小于或等于该值
@Min//该字段的值只能大于或等于该值
@NotNull//不能为null
@NotBlank//不能为空,检查时会将空格忽略
@NotEmpty//不能为空,这里的空是指空字符串
@Null//检查该字段为空
@Past//检查该字段的日期是在过去
@Size(min=, max=)//检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@URL(protocol=,host,port)//检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
@Valid//该注解只要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,
//这样在检查当前对象的同时也会检查该字段所引用的对象
@NotEmpty,@NotNull和@NotBlank的区别
1 @NotEmpty :不能为null,且Size>0
2 @NotNull:不能为null,但可以为empty,没有Size的约束
3 @NotBlank:只用于String,不能为null且trim()之后size>0
1.创建自定义校验器
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyConstraintValidator.class)
public @interface MyConstraint {
/**
* @Description: 错误提示
*/
String message() default "请输入正确性別";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, String> {
//String为校验的类型
@Override
public void initialize(MyConstraint myConstraint) {
//启动时执行
}
/**
* @Description: 自定义校验逻辑
*/
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (!(s.equals("男") || s.equals("女")))
return false;
return true;
}
}
@Target用于指定使用范围,该处限定只能在字段上使用
@Retention(RetentionPolicy.RUNTIME)表示注解在运行时可以通过反射获取到
@Constraint(validatedBy = xxx.class)指定该注解校验逻辑
2.创建校验实体,使用Hibernate Validator自带注解以及自定义的注解
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
//@Data为lombok注解,用于省略get(),set()方法
@Data
public class User {
@Length(min = 8, max = 18, message = "用户名长度必须为8-18")
private String username;
@Length(min = 8, max = 18, message = "密码长度必须为8-18")
private String password;
@MyConstraint
private String sex;
@Email
private String email;
}
3.写一个controller
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
public class UserController {
@PutMapping("/user")
public String test(@Valid @RequestBody User user, BindingResult result){
StringBuilder sb = new StringBuilder();
if (result.hasErrors()){
//记录错误信息
result.getAllErrors().stream()
.forEach(error -> sb.append(error.getDefaultMessage() + "/"));
}
return sb.toString();
}
}