SpringBoot系列(5)——表單驗證

前言:

/**
     * 添加一個學生
     */
    @PostMapping("/students")
    public Student studentAdd(@RequestParam("name") String name,
                             @RequestParam("age") Integer age){
        Student student=new Student();
        student.setName(name);
        student.setAge(age);
        return stuentRepository.save(student);
    }

如上代碼,添加學生的方法須要接受兩個參數:name和age,但現實業務狀況下,一個實體類中極可能有不少屬性,新增記錄的時候就要傳入不少參數,因此更爲簡便的方式是傳入一個pojo對象來代替一堆屬性java

那麼如何進行數據校驗呢?好比,咱們須要限制學生年齡不得小於10歲,該如何進行操做呢?git

1. 首先,在待校驗字段上加上 @Min 註解,value屬性表明最小的年齡,message屬性表明校驗錯誤時返回的信息:正則表達式

2. 在方法入參處使用 @Valid 註解修飾,代表該入參是待校驗的,同時,方法入參再加上BindingResult,該對象用來保存錯誤信息:app

/**
     * 添加一個學生
     */
    @PostMapping("/students")
    public Student studentAdd(@Valid Student student , BindingResult result){
        if (result.hasErrors()){
            System.out.println(result.getFieldError().getDefaultMessage());
            return null; 
        }
        student.setName(student.getName());
        student.setAge(student.getAge());
        return stuentRepository.save(student);
    }

3. 在執行方法體以前判斷BindingResult中是否含有錯誤,如果校驗出錯,則打印錯誤並返回空值(退出程序)spa

寫在最後:

其餘的表單驗證註解:.net

@NotEmpty 不爲null,且長度大於0
@Length 示例:@Length(min=6, message="密碼長度不能少於6位")
@null           驗證對象是否爲空
@notnull     驗證對象是否爲非空
@asserttrue   驗證 boolean 對象是否爲 true
@assertfalse   驗證 boolean 對象是否爲 false
@min           驗證 number 和 string 對象是否大等於指定的值
@max           驗證 number 和 string 對象是否小等於指定的值
@decimalmin   驗證 number 和 string 對象是否大等於指定的值,小數存在精度
@decimalmax   驗證 number 和 string 對象是否小等於指定的值,小數存在精度
@size           驗證對象(array,collection,map,string)長度是否在給定的範圍以內
@digits       驗證 number 和 string 的構成是否合法
@past           驗證 date 和 calendar 對象是否在當前時間以前
@future       驗證 date 和 calendar 對象是否在當前時間以後
@pattern     驗證 string 對象是否符合正則表達式的規則
@Email     驗證郵箱

對一些類似的註解進行辨析:code

  • 1.@NotNull:不能爲null,但能夠爲empty對象

    (""," ","   ")
  • 2.@NotEmpty:不能爲null,並且長度必須大於0ci

    (" ","  ")
  • 3.@NotBlank:只能做用在String上,不能爲null,並且調用trim()後,長度必須大於0get

    ("test")    即:必須有實際字符

 @Length         支持類型: CharSequence

 @Size          支持類型:String, Collection, Map 和 arrays. Additionally supported by HV:

                      any sub-type of CharSequence.

相關文章
相關標籤/搜索