Java Bean Validation 驗證以及分組驗證

Java Bean Validation 驗證以及分組驗證前端

    數據在前端驗證後,在後端也會作一樣的驗證以增長程序的健壯性。最簡單的是在controller層作判斷,可是,若是每一個接口都要對接收的參數作相同的判斷,這無疑會增長冗餘且不美觀。這時可使用註解驗證的方式。java

 

普通驗證:

    假如須要新增一個學生,學生姓名不容許爲空。後端

1. 首先建立學生實體類,並在屬性上加上註解。

public class Student{
   //主鍵
   private String id;

   //名稱
   @NotNull(message="姓名不能爲空")
   @Size(min=1, max=6,message="姓名長度爲1~6")
   private String name;
   //...getter and setter
}

2. 而後在controller的bean加上@Valid註解

  • 在須要校驗的Model上面加上@Valid便可;
  • 每個模型對象後邊都須要跟一個Errors或BindingResult對象來保存驗證結果。
@RequestMapping(value = "/add")
@ResponseBody
public String add(@RequestBody @Valid Student student, BindingResult result) {
    // 校驗數據的合法性
    if (result.hasErrors()) {
        List<ObjectError> errorList = result.getAllErrors();
            for (ObjectError error : errorList) {
                return error.getDefaultMessage(); //返回錯誤消息
            }
        }
    }
}

 

分組驗證:

    在新增或者編輯學生時,對參數的校驗也是不同的,例如,新增學生時只需驗證學生姓名便可,而編輯學生時須要驗證學生id和學生姓名。這時就須要使用分組驗證。app

1. 首先在學生實體類中增長兩個空接口,分組接口

    分組接口只是普通的接口,主要用於標識。spa

/**
 * 此接口用於標識新增Student時的參數校驗規則
 */
public interface Add{  
}

/**
 * 能夠在一個Model上面添加多套參數驗證規則,此接口用於標識更新Student時的參數校驗規則
 */
public interface Update{  
}

2. 而後爲屬性上的註解註明分組

public class Student{
    //主鍵
    @NotNull(message="學生id不能爲空",groups = {Add.class})
    private String id;

    //名稱
    @NotNull(message="姓名不能爲空",groups = {Add.class,Update.class})
    @Size(min=1, max=6,message="姓名長度爲1~6",groups = {Add.class,Update.class})
    private String name;

    //...getter and setter

    public interface Add{
    }

    public interface Update{
    }
}

3. 啓用校驗並指定使用哪一個校驗規則

    經過@Validate註解標識要驗證的分組;若是要驗證兩個的話,能夠這樣@Validated({Add.class, Update.class})。.net

@RequestMapping(value = "/add")
@ResponseBody
public String add(@RequestBody @Validated({Add.class}) Student student, BindingResult result) {
    // 校驗數據的合法性
    if (result.hasErrors()) {
        return "error";
    }
}
相關文章
相關標籤/搜索