JSR303数据校验使用方法记录
JSR303并不对应着指定的jar包,而是一种规范,目前hibernate-validator
是使用最多的是基于JSR303规范的实现
本文不适合新人观看,要求至少要知道使用方法
Springboot整合JSR303的starter启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
正常引用hibernate-validator
的依赖
<!-- 6.2.0.Final是推荐使用的版本 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
常用注解记录
这里记录一些常见常用的注解,并非全部,如有遇到会随时补充
注解简单介绍
每个注解都包含通用属性,这里介绍一下message和groups:
注解 | 作用 |
---|---|
message | 字符串,报错后提示的错误信息 |
groups | 接口的class属性,为校验分组 |
值类型校验
注解 | 作用 |
---|---|
@Null | 必须为Null |
@NotNull | 必须不为Null |
@NotBlank | 必须不为空(去除首位空格) |
@NotEmpty | 效果等同于@NotBlank |
@AssertTrue | 必须为true |
@AssertFalse | 必须为false |
@Pattren | 必须符合该正则表达式 |
必须是电子邮箱格式 |
范围类型校验
注解 | 作用 |
---|---|
@Min | 必须是数字且大于等于指定的数字 |
@Max | 必须是数字且小于等于指定的数字 |
@Range | 必须是数字且大于等于min ,小于等于max |
@DecimalMin | 必须是数字且大于等于指定的数字 |
@DecimalMax | 必须是数字且小于等于指定的数字 |
@Digits | 必须是数字且整数位不能超过integer 位,小数位不能超过fraction 位 |
@Length | 必须是字符串且大于等于min 并且小于等于max |
@Size | 适用于字符串集合数组,长度大于等于min 并且小于等于max |
@Past | 必须是过去的日期 |
@Future | 必须是将来的日期 |
自定义校验注解
自定义校验注解需要创建一个注解,然后加上每个校验注解都有的三个基本属性
@Documented
@Target({ METHOD, FIELD, PARAMETER })
@Retention(RUNTIME)
public @interface Phone {
String message() default "";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
现在注解就创建完成了,但是是个没用的空壳注解,想要让他拥有校验的能力需要一个类来帮他完成校验,使用@Constraint
注解来指定让哪个类来帮自己完成校验
@Documented
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
// 表示要用PhoneValidate来帮自己完成校验
@Constraint(validatedBy = PhoneValidate.class)
public @interface Phone { ... }
接下来创建PhoneValidate
类来帮注解完成校验规则
// 该类必须实现ConstraintValidator接口,泛型中的Phone代表生效的注解,String代表被注解的属性的类型
public class PhoneValidate implements ConstraintValidator<Phone, String> {
// private String pattern;
@Override
public void initialize(Phone annotation) {
// 这里执行优先级高,可以通过annotation获取到注解中携带的值,用于后续校验处理,例如:
// this.pattern = annotation.pattern();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 通过返回true或false来决定校验是否通过
String regExp = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])|(18[0-9])|(19[8,9]))\\d{8}$";
return value.matches(regExp);
}
}
全局异常处理
Contrller层的实体类加上@Valid注解后会开启参数校验,未通过校验规则会抛出异常,针对异常可以通过全局异常处理优雅的返回错误信息,这里就不写那么细了,直接将方法粘过来
@Slf4j
@RestControllerAdvice
public class ExceptionControllerAdvice {
/** JSR303参数校验失败异常 */
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
// 获取参数异常信息
BindingResult bindingResult = e.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
// 创建Map集合,用于存储异常信息返回给页面
Map<String, String> errors = new HashMap<>();
fieldErrors.forEach(item -> errors.put(item.getField(), item.getDefaultMessage()));
return errors;
// 这个R是自己项目中封装的通用返回模板
// return R.error(BizCodeMenu.VALID_EXCEPTION).put("data", errors);
}
}
JSR303数据校验使用方法记录的更多相关文章
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- YAML语法使用,JSR303数据校验
YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- springboot配置(yami配置文件,JSR303数据校验,多环境配置)
yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...
- SpringMVC框架07——服务器端JSR303数据校验
1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...
- springMVC使用JSR303数据校验
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
- JSR303数据校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 导入依赖: <dependency> <groupId>org ...
- SpringBoot 之 JSR303 数据校验
使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...
- JSR-303 数据校验学习
一.JSR-303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ...
- Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决
通过继承ActionSupport类来完成Action开发,ActionSupport类不仅对Action接口进行简单实现, 同时增加了验证.本地化等支持 .真实开发中自定义Action都需要继承该类 ...
随机推荐
- Apache Dubbo 3.0.0 正式发布 - 全面拥抱云原生
简介: 一个新的里程碑! 一.背景 自从 Apache Dubbo 在 2011 年开源以来,在一众大规模互联网.IT公司的实践中积累了大量经验后,Dubbo 凭借对 Java 用户友好.功能丰富.治 ...
- [PHP] 浅谈 Laravel Scout 的存在意义
注:Laravel Scout 是官方支持的对框架模型数据进行全文检索功能的扩展包. Laravel 的 Scout 与 Eloquent ORM 进行了深度集成,不用开发者再自己进行代码侵入了. L ...
- 2018-8-10-win10-uwp-App-to-app-communication-应用通信
title author date CreateTime categories win10 uwp App-to-app communication 应用通信 lindexi 2018-08-10 1 ...
- 有意思!一个关于 Spring 历史的在线小游戏
发现 Spring One 的官网上有个好玩的彩蛋,分享给大家! 进到Spring One的官网,可以看到右下角有个类似马里奥游戏中的金币图标. 点击该金币之后,会打开一个新的页面,进入下面这样一个名 ...
- MacBook M1 虚拟机安装Windows for ARM使用体验
前言 大家好,我是 刚进入春天还没来得及踏青又开始从早忙到晚的 蛮三刀.去年给大家带来了一篇比较详尽的MacBook M1评测.评测经历了全网的热情转载,成为了我唯一的一篇爆款文章(我该哭还是该笑!) ...
- C++ Grammar Focus
一.结构体 1.基础模板 struct Node { <变量类型1> 变量名1; <变量类型2> 变量名2; ... } <定义变量名1>,<定义变量名2&g ...
- 开源文档预览项目 kkFileView (9.9k star) ,快速入门
kkFileView 是一款文件文档在线预览解决方案,采用流行的 Spring Boot 框架构建,易于上手和部署. 该项目基本支持主流办公文档的在线预览,包括但不限于 doc.docx.xls.xl ...
- 使用NSSM将.exe程序安装成windows服务
1.下载NSSM:NSSM - the Non-Sucking Service Manager 2.cmd方式安装服务 将下载的压缩包解压,找到nssm.exe,以管理员身份打开cmd,在cmd中定位 ...
- 手把手教你整Win10的Linux子系统(Ubuntu)
手把手教你整Win10的Linux子系统(Ubuntu) https://www.bilibili.com/read/cv7770224/ 设置root用户的密码 可以通过 sudo passwd r ...
- fastposter 2.5.0 全新发布 一款电商级海报生成器
fastposter 2.5.0 全新发布 低代码海报生成器 fastposter低代码海报生成器,一分钟完成海报开发.支持Java.Python.PHP. Go.JavaScript等多种语言. v ...