Java Bean Validation 驗證以及分組驗證前端
數據在前端驗證後,在後端也會作一樣的驗證以增長程序的健壯性。最簡單的是在controller層作判斷,可是,若是每一個接口都要對接收的參數作相同的判斷,這無疑會增長冗餘且不美觀。這時可使用註解驗證的方式。java
假如須要新增一個學生,學生姓名不容許爲空。後端
public class Student{ //主鍵 private String id; //名稱 @NotNull(message="姓名不能爲空") @Size(min=1, max=6,message="姓名長度爲1~6") private String name; //...getter and setter }
@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
分組接口只是普通的接口,主要用於標識。spa
/** * 此接口用於標識新增Student時的參數校驗規則 */ public interface Add{ } /** * 能夠在一個Model上面添加多套參數驗證規則,此接口用於標識更新Student時的參數校驗規則 */ public interface Update{ }
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{ } }
經過@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"; } }