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"; } }