@Validated :绑定需要校验的数据.
数据校验规则:为数据绑定校验的规则
private Long booId;
@NotNull(message = "不能为空")
private String bookName;
private String author;
private String publisher;
@DecimalMin(value = "20",message = "不能低于20元")
@DecimalMax(value = "100",message = "不能多于100")
private Float price;
//正则表达式检验
//正则表达式用来判断某个字符串是否符合某个规则
//或者用来提取一整个字符 串中满足某个规则的子串
@Pattern(regexp = "1[345678][0-9]{9}")
private String Mobile;
为是实体类属性绑定检验规则:
message为检验不合格时的提示信息.
import javax.validation.constraints.*; public class BookBean { private Long booId; @NotNull(message = "书名不能为空") private String bookName; private String author; private String publisher; @DecimalMin(value = "20",message = "不能低于20元") @NotNull(message = "价格不能为空") @DecimalMax(value = "100",message = "不能多于100") private Float price; //正则表达式检验 //正则表达式用来判断某个字符串是否符合某个规则 //或者用来提取一整个字符 串中满足某个规则的子串 @Pattern(regexp = "1[345678][0-9]{9}") private String Mobile;public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public String getMobile() { return Mobile; } public void setMobile(String mobile) { Mobile = mobile; } public Long getBooId() { return booId; } public void setBooId(Long booId) { this.booId = booId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } public Float getPrice() { return price; } public void setPrice(Float price) { this.price = price; } }
绑定数据检验:
注意:校验结果:BindingResult result必须经跟在@Validated BokBean bokBean 后面.用于接受检验的结果.
@RequestMapping("/book/creat") public String create(@Validated BokBean bokBean, BindingResult result, Model model){ //可以通过BindingResult对象拿到校验的错误信息. //注意:该参数必须要紧跟在被校验的对象的后面 if (result.hasErrors()){ //判断是否有检验的错误 // result.getFieldError("bookName").getDefaultMessage(); for (FieldError error : result.getFieldErrors()) { //获取被校验对象的所有错误 String message = error.getDefaultMessage(); System.out.println(message); } //可以直接把错误信息的集合都放到集合里 model.addAttribute("erros", result.getFieldErrors()); return "erro"; } return "success"; }
自定义检验规则,有时候spring自带的检验规则不满足我们使用时,可以自定义检验规则.
检验规则:
public class IDValidator implements ConstraintValidator<IDVlidation,String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { //这里引用了一个身份证检验的工具类 return IdCardUtils.isIDCard(value); }
//这个方法可不实现 @Override public void initialize(IDVlidation constraintAnnotation) { } }
自定义一个检验规则的注解,自定义注解见自定义注解章节:https://www.cnblogs.com/zhouchangyang/p/10908343.html
定义这个注解为了方便,可仿造spring定义的注解规则写(赋值粘贴)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) //表明该注解可用在哪里 @Retention(RUNTIME) //表明生效时间 @Repeatable(IDVlidation.List.class) @Constraint(validatedBy = {IDValidator.class}) //注明该注解所实现的规则是哪个类 public @interface IDVlidation { String message() default ""; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @interface List { IDVlidation[] value(); } }
这样就定义好了一个规则的注解,
使用自定义注解和使用系统的注解一样,添加到需要校验的属性上面即可:
@IDVlidation(message = "省份证不符合规范") private String idCard;
原文:https://www.cnblogs.com/zhouchangyang/p/10914528.html