SpringBoot如何使用jsr303校验

  介绍

本篇文章为大家展示了SpringBoot如何使用jsr303校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

依赖添加

& lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-validation   & lt;/dependency>

一些较老版本的SpringBoot需要添加相关依赖,我使用的2.1.4发行版不用这个操作。


公共类PointDeductSetRequest {
  私人长id;
  @NotBlank(消息=白饣d为空“)
  私人字符串tenantId;
  私人整数状态;
  @NotNull
  私人整数pointValue;
  @NotNull
  私人整数deductValue;
  @NotBlank(消息=安僮髟眎d为空“)
  私人字符串运算符;
  }

首先在需要验证的对象的对应字段上方加上校验注解,以下为一些常用注解:

    <李> @Null限制只能为零李 <李> @NotNull限制必须不为空 <李> @AssertFalse限制必须为假 <李> @AssertTrue限制必须为真实李 <李> @DecimalMax(值)限制必须为一个不大于指定值的数字 <李> @DecimalMin(值)限制必须为一个不小于指定值的数字 <李> @Digits(整数、分数)限制必须为一个小的数,且整数部分的位数不能超过整数,小数部分的位数不能超过分数 <李> @Future限制必须是一个将来的日期 <李> @Max(值)限制必须为一个不大于指定值的数字 <李> @Min(值)限制必须为一个不小于指定值的数字 <李> @Past限制必须是一个过去的日期 <李> @Pattern(值)限制必须符合指定的正则表达式 <李> @(最大值、最小值)限制字符长度必须在最小到最大之间李 <>李@Past验证注解的元素值(日期类型)比当前时间早李 <>李@NotEmpty验证注解的元素值不为零且不为空(字符串长度不为0,集合大小不为0) <李> @NotBlank验证注解的元素值不为空(不为空,去除首位空格后长度为0),不同于@NotEmpty, @NotBlank只应用于字符串且在比较时会去除字符串的空格李 <>李验证注解的元素值是电子邮件,也可以通过正则表达式和旗帜指定自定义的邮件格式
 @RequestMapping (value=https://www.yisu.com/zixun/?扣除”,方法=RequestMethod.POST)
  公共BusinessResponse setPointDeduct (@RequestBody @Valid PointDeductSetRequest请求){
  pointDeductService.setPointDeductRule(请求);
  返回新BusinessResponse (ResponseEnum.OK);
  }

之后在控制器方法的对象参数前加@Valid注解。

 @RequestMapping (value=https://www.yisu.com/zixun/?扣除”,方法=RequestMethod.GET)
  公共PageResponse  getPointDeductList (@RequestParam (value=耙趁妗?要求=false)整数页面,
  @RequestParam(值="页大小",要求=false)整数页大小,
  @RequestParam(值=皌enantId”,要求=false) @NotBlank(消息=白饣d为空”)字符串tenantId,
  @RequestParam(值="状态",要求=false)整数状态){=pointDeductService PageResponse 反应。getPointDeductList(页面、页大小tenantId、状态);
  response.setCodeMsg (ResponseEnum.OK);
  返回响应;
  }

首先需要在控制器类上加@Validated注解,之后在方法中需要校验的参数前加上对应的校验注解进行校验。


定义全局异常处理类并用@ControllerAdvice标注,由于对象和单个参数因校验产生的异常类型不同,因此需要分别处理。

对于对象作为接收前端请求的情况,因校验产生的异常类型为MethodArgumentNotValidException,示例方法如下:

/* *   *捕获303年对于身体中的对象字段校验   * @param e   * @param请求   * @return   */@ExceptionHandler (MethodArgumentNotValidException.class)   @ResponseBody   ResponseEntityhandleMethodArgumentNotValidException (MethodArgumentNotValidException e, HttpServletRequest请求){   List.getFieldErrors fieldErrors=e.getBindingResult () ();   如果(fieldErrors !=零,,! fieldErrors.isEmpty ()) {   字符串消息=fieldErrors.get (0) .getDefaultMessage ();   日志。错误(消息,e);   }   HttpStatus HttpStatus=HttpStatus.INTERNAL_SERVER_ERROR;   HttpHeaders header=new HttpHeaders ();   响应响应=new响应();   response.setCode (ResponseEnum.FORMAT_ERROR.code ());   response.setMessage (ResponseEnum.FORMAT_ERROR.message ());   返回新ResponseEntity<祝辞(反应、头部httpStatus);   }

对于使用单个参数接受前端请求,因校验产生的异常类为ConstraintViolationException,示例方法如下:

SpringBoot如何使用jsr303校验

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5