首页 > 编程语言 > 详细

Spring_数据校验和自定义检验规则

时间:2019-05-23 21:22:35      阅读:155      评论:0      收藏:0      [点我收藏+]

@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;

 

Spring_数据校验和自定义检验规则

原文:https://www.cnblogs.com/zhouchangyang/p/10914528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!