项目中一个接口有几个参数,其中有必填的也有可选的,要求使用hibernate的validate注解实现参数校验,必填参数好说,可选参数无法实现这两个校验:一是参数为空的条件下什么也不做;二是参数不为空的条件下,参数是否符合取值范围
如果只使用validate注解,只能实现第二条,即一个@NotBlank注解,上面再加一个@Pattern注解或其他注解限制取值范围。对于第一条,因为当前参数是可选的,如果不传,@NotBlank注解直接就会抛出异常不满足条件,所以无法实现第一条,那么怎么办呢?
@RequestParam注解粉墨登场了,这个注解里面有一个属性required=false,表示此参数非必填,并且可指定默认值。上面的问题,解决方法就是可选参数前面加一个@RequestParam注解,标明可选,然后紧接着跟一个validate注解,举个例子:
@RequestMapping("/findById")
public Result findUserById(@Valid SearchParamBO searchParamBO,
@Min(value = 1, message = "id不合法")
@RequestParam(value = "id",
required = false) Long id,
@Pattern(regexp = "^(-1)$|^(0)$|^(1)$",
message = "status不合法")
@RequestParam(value = "status",
required = false) String status
) {
......
}
别忘了在类名上加@Validated 注解哦