1.建一个springboot项目
2.导入相应的jar包
<!--参数校验 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>3.0.3</version>
</dependency>
pojo类中定义参数
/**
* @author 小乌龟
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="保存Article对象", description="文章删除状态 0 表示为删除 1 表示已经删除")
public class SaveArticleVO {
// @NotNull 限制传入的值不为null。作用在int,Integer等数值类型上时,在限制不为null的同时也不能为空字符串。作用在String上时,限制不为null但是可以为空字符串。作用在类上时,限制不为null。
// @NotEmpty 作用于String类型,限制不能为null,且长度不为0,可以是空格字符串。
// @NotBlank 作用于String类型,限制不能为null,且去掉空格,即trim之后,长度不为0。
// @Max 作用于数值类型,限制最大值(包含该最大值)
// @Min 作用于数值类型,限制最小值(包含该最小值)
// @Email 作用于String类型,验证是否符合email格式
private static final long serialVersionUID = 1L;
@NotBlank(message = "文章标题不能为空")
@ApiModelProperty(value = "文章标题")
private String article_name;
@NotBlank(message = "文章内容不能为空")
@ApiModelProperty(value = "文章内容")
private String article_content;
@NotBlank(message = "文章简介不能为空")
@ApiModelProperty(value = "文章简介")
private String synopsis;
public static Article saveArticleVO(SaveArticleVO article){
Article article1 = new Article();
article1.setArticle_name(article.getArticle_name());
article1.setArticle_content(article.getArticle_content());
article1.setSynopsis(article.getSynopsis());
return article1;
}
}
第一种方法 controller 中使用参数校验
/**
* @author 小乌龟
*/
@RestController
@RequestMapping("/article")
@Api(tags = {"文章"})
@Validated //对本类中的方法 开启验证功能
public class ArticleController extends BaseController{
@Autowired
private IArticleService iArticleService;
@PostMapping("/add")
@ApiOperation("添加文章")
public Results saveArticle(@Valid /*校验后面的参数 */ SaveArticleRo article) {
return iArticleService.saveArticle(article);
}
}
第二种方法 在service中使用
(推荐 controller层中可能接收的不仅仅是前端传来的数据 还可以是别的接口数据 比如 微信支付接口 调回数据 所以可以在service中处理全部的数据)
接口:
/**
*保存文章
* @param article
* @return Results
* @author zhangjunrong
* @date 2022/1/28 17:17
*/
Results saveArticle(@Valid SaveArticleVO article);
类:
list验证:
分组验证:
bean 参数之间 关联 关系 controller举例
package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;
public class RentalCarGroupSequenceProvider
implements DefaultGroupSequenceProvider<RentalCar> {
@Override
public List<Class<?>> getValidationGroups(RentalCar car) {
List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
defaultGroupSequence.add( RentalCar.class );
if ( car != null && !car.isRented() ) {
defaultGroupSequence.add( CarChecks.class );
}
return defaultGroupSequence;
}
}
package org.hibernate.validator.referenceguide.chapter05.groupsequenceprovider;
@GroupSequenceProvider(RentalCarGroupSequenceProvider.class)//核心
public class RentalCar extends Car {
@AssertFalse(message = "The car is currently rented out", groups = RentalChecks.class)
private boolean rented;
public RentalCar(String manufacturer, String licencePlate, int seatCount) {
super( manufacturer, licencePlate, seatCount );
}
public boolean isRented() {
return rented;
}
public void setRented(boolean rented) {
this.rented = rented;
}
}
常用校验注解
@Null 只能是null
@NotNull 不能为null 注意用在基本类型上无效,基本类型有默认初始值
@AssertFalse 必须为false
@AssertTrue 必须是true
字符串/数组/集合检查:(字符串本身就是个数组)
@Pattern(regexp="reg") 验证字符串满足正则
@Size(max, min) 验证字符串、数组、集合长度范围
@NotEmpty 验证字符串不为空或者null
@NotBlank 验证字符串不为null或者trim()后不为空
数值检查:同时能验证一个字符串是否是满足限制的数字的字符串
@Max 规定值得上限int
@Min 规定值得下限
@DecimalMax("10.8") 以传入字符串构建一个BigDecimal,规定值要小于这个值
@DecimalMin 可以用来限制浮点数大小
@Digits(int1, int2) 限制一个小数,整数精度小于int1;小数部分精度小于int2
@Digits 无参数,验证字符串是否合法
@Range(min=long1,max=long2) 检查数字是否在范围之间
这些都包括边界值
日期检查:Date/Calendar
@Post 限定一个日期,日期必须是过去的日期
@Future 限定一个日期,日期必须是未来的日期
其他验证:
@Vaild 递归验证,用于对象、数组和集合,会对对象的元素、数组的元素进行一一校验
@Email 用于验证一个字符串是否是一个合法的右键地址,空字符串或null算验证通过
@URL(protocol=,host=,port=,regexp=,flags=) 用于校验一个字符串是否是合法URl