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";
    }
}
相关文章
相关标签/搜索