前言
在java后端开发中我们需要对访问接口的数据做校验,防止大量脏数据进入数据库(当然,现在mybatis也会使用动态sql实现简单的数据校验)。
因此我便要介绍一下java后端校验的一个规范——JSR-303
一、什么是jsr-303
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
用一句简短的话讲就是一种java后端数据校验方式
二、使用步骤
1.引入pom文件
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
2.在实体类上添加校验规则
-
校验规则
@Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max=, min=) 被注释的元素的大小必须在指定的范围内 @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式 @NotBlank(message =) 验证字符串非null,且长度必须大于0 @Email 被注释的元素必须是电子邮箱地址 @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串的必须非空 @Range(min=,max=,message=) 被注释的元素必须在合适的范围内
3.在实体类中属性上加上对应的校验规则注解
@Data
public class ArticleDto {
private Long articleId;
@NotBlank(message = "标题不能为空")
@Size(max = 20,message = "标题不能超过二十个字符")
private String title;
@NotBlank(message = "正文不能为空")
private String summary;
@URL(message = "不是一个正确的url")
private String imageUrl;
private String channel;
@Size(max = 8,message = "不能超过8个字符")
private String tags;
}
4.在接口中需要校验的DTO(实体类)前添加@Valid注解
示例:
@RequestMapping("/addBook")
//如果没有写统一异常处理,则在方法中加上参数BindingResult,判断是否验证成功
public String addBook(@Validated Book book, BindingResult bindingResult){
System.out.println("进入新增方法");
//判断是否验证成功
if(bindingResult.hasErrors()){
System.out.println("验证失败");
//验证失败
return "book/addBook";
}else {
//验证成功
bookService.insert(book);
return "redirect:queryBookPage";
}
}
如果在springboot中已经定义了全局异常处理那么可以直接被捕获返回前端。具体文章可以参考我的这篇文章 前后端分离项目中异常捕获美观处理