<强>前言强>
在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据。
1,首先还是先导包,导入pom文件。
& lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-validation & lt;/dependency> >之前2,解释一下注解的作用
@Null限制只能为空
引用>
@NotNull限制必须不为空
@NotEmpty只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank只作用于字符串类型,字符串不为空,并且修剪()后不为空串
@AssertFalse限制必须为假
@AssertTrue限制必须为真实
@DecimalMax(值)限制必须为一个不大于指定值的数字
@DecimalMin(值)限制必须为一个不小于指定值的数字
@Digits(整数、分数)限制必须为一个小的数,且整数部分的位数不能超过整数,小数部分的位
数不能超过分数
@Future限制必须是一个将来的日期
@Past验证注解的元素值(日期类型)比当前时间早
@Max(值)限制必须为一个不大于指定值的数字
@Min(值)限制必须为一个不小于指定值的数字
@Pattern(值)限制必须符合指定的正则表达式
@(最大值、最小值)限制字符长度必须在最小到最大之间
验证注解的元素值是电子邮件,也可以通过正则表达式和旗帜指定自定义的邮件格式3,在实体类加上要验证的字段。(我这里随便写下)
标注的地方就是用来分组校验的,下下面会解释。
@ data 公开课LoginVo { @ApiModelProperty(值=" https://www.yisu.com/zixun/用户名称”) @NotEmpty(消息="用户名不能为空! ",组=LoginModel.class) @NotEmpty(消息="添加时用户名不能为空! ",组=SaveModel.class) 私人字符串的用户名; @ApiModelProperty(值=" https://www.yisu.com/zixun/密码”) @ (min=2,消息="密码最少为2位”,组=LoginModel.class) @ (min=6、消息="密码最少为6位”,组=SaveModel.class) 私人密码字符串; } >之前通过群体的属性来分组,假设我在使用登录分组校验的时候,设定用户名不能为空和密码最少为2位的验证。而在添加分组设定添加时用户名不能为空和密码最少为6位的验证。
4,在来解释下上面标注的分组接口。
LoginModel
进口javax.validation.groups.Default; 公共接口LoginModel扩展默认{ } >之前必须继承默认的Defaut接口不然后抛出异常。
SaveModel
进口javax.validation.groups.Default; 公共接口SaveModel扩展默认{ } >之前5,在控制器的接口上加上@Validated注解,参数就加上你需要根据那种规则来校验。
@ApiOperation(值=" https://www.yisu.com/zixun/登录以后返回令牌”) @PostMapping (value=" https://www.yisu.com/login ") 公共结果登录(@RequestBody @Validated (LoginModel.class) LoginVo LoginVo) { 字符串标记=userService.login (loginVo.getUserName (), loginVo.getPassword ()); 返回Result.success(令牌); } >之前运行后只能在控制台显示错误的结果,新的问题又来了怎么把错误的结果通过自己的结果类返回给前端。这就需要对错误全局捕捉了。
6,写一个对响应换回结果的处理。
@RestControllerAdvice @Slf4j 公开课ParameterCalibration { @ExceptionHandler ({MethodArgumentNotValidException。类,BindException.class}) @ResponseStatus (HttpStatus.OK) @ResponseBody 公共结果handleMethodArgumentNotValidException(例外的例外){ StringBuilder errorInfo=new StringBuilder (); BindingResult BindingResult=零; 如果(异常instanceof MethodArgumentNotValidException) { bindingResult=((MethodArgumentNotValidException)例外).getBindingResult (); } 如果(异常instanceof BindException) { bindingResult=((BindException)例外).getBindingResult (); } for (int i=0;我& lt;.size bindingResult.getFieldErrors () ();我+ +){ 如果我比;0){ errorInfo.append (", "); } FieldError FieldError=bindingResult.getFieldErrors () . get(我); errorInfo.append (fieldError.getField ())。追加(“:”).append (fieldError.getDefaultMessage ()); } log.error (errorInfo.toString ());//这里返回自己的结果的结果类。 返回Result.validateFailed (errorInfo.toString ()); } @ExceptionHandler (Exception.class) @ResponseStatus (HttpStatus.BAD_REQUEST) @ResponseBody 公共结果handleDefaultException(例外的例外){ log.error (exception.toString ());//这里返回自己的结果的结果类。 返回Result.validateFailed(“服务器错误”,例外); } }SpringBoot @Validated注解实现参数分组校验的方法实例