介绍
本篇文章为大家展示了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) 公共PageResponsegetPointDeductList (@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 ResponseEntity
对于使用单个参数接受前端请求,因校验产生的异常类为ConstraintViolationException,示例方法如下: