关于数据校验Bean Validation的学习
1,导相关依赖
2,常用的Validation注解
@NotNull: 标记字段不能为 null
@NotEmpty: 标记集合字段不为空(至少要有一个元素)
@NotBlank: 标记字段串字段不能是空字符串(即它必须至少有一个字符)
@Min / @Max: 标记数字类型字段必须大于/小于指定的值
@Pattern: 标记字符串字段必须匹配指定的正则表达式
@Email: 标记字符串字段必须是有效的电子邮件地址
还有很多,暂不列举。
3,在实体类中配置,例如:
package com.itcast.ucenter.entity
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; /**
* <p>
* 用户信息表
* </p>
*
* @author StarRiver
* @since 2022-11-15
*/
@Data
public class User{
//标记接口,新增组
public interface Add{
}
private static final long serialVersionUID = 1L; private Long userId; private String nickName; @NotNull(message = "手机号不能为空")
@Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字")
@Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误")
private String phonenumber; @NotNull(groups={Add.class},message = "密码不能为空")
private String password; }
4,在方法上校验,例如:
@PostMapping("register")
public R registerUser(@Valid RegisterVo registerVo) {
userService.register(registerVo);
return R.ok();
}
@Valid注解的作用:是启动自动验证@Validated注解的作用,自动按组进行校验,1比如:
@PostMapping("register")
public R registerUser(@Validated({Add.class}) RegisterVo registerVo) {
userService.register(registerVo);
return R.ok();
}
2,如果使用了这种
@PostMapping("login")
public R loginUser(@NotNull(message = "手机号不能为空")
@Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字")
@Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误")
@RequestParam String phonenumber,
@NotNull(message = "密码不能为空")
@RequestParam String password) {
//调用service方法实现登录
//返回token值,使用jwt生成
String token = userService.login(phonenumber,password);
return R.ok().data("token", token);
}
那么要在类上面加上 @Validated注解,才可以使得参数的校验生效
5,统一异常返回类
package com.itcast.servicebase.exceptionhandler; import com.itcast.commonutil.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; @ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler { /**
* @param e
* @return
* @Validated写在方法上会报这个异常数据校验异常返回
*/
@ExceptionHandler(value = BindException.class)
public R BindEx(BindException e) {
List<FieldError> fieldErrors = e.getFieldErrors();
StringBuilder sb = new StringBuilder();
for (FieldError fe : fieldErrors) {
sb.append("属性:")
.append(fe.getField())
.append("校验不通过,原因:")
.append(fe.getDefaultMessage())
.append(";");
}
return R.error().data("message", sb.toString());
} //@Validated写在类上会报这个异常数据校验异常返回
@ExceptionHandler(value = ConstraintViolationException.class)
public R BindHandlerEx(ConstraintViolationException e) {
Set<ConstraintViolation<?>> set = e.getConstraintViolations();
List<String> list = set.stream().map(v ->
"属性:" + v.getPropertyPath()
+ ",属性的值:" + v.getInvalidValue()
+ ",校验不通过的提示信息:" + v.getMessage()
+ ",消息模板:" + v.getMessageTemplate())
.collect(Collectors.toList());
return R.error().data("list", list);
} //自定义异常
@ExceptionHandler(ShopException.class)
public R error(ShopException e) {
e.printStackTrace();
return R.error().code(e.getCode()).message(e.getMsg());
}
}
6,待学习。
关于数据校验Bean Validation的学习的更多相关文章
- Java数据校验(Bean Validation / JSR303)
文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...
- springboot使用hibernate validator校验,Bean Validation校验
第一个地址:springboot使用hibernate validator校验,Bean Validation校验
- Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)
每篇一句 没有任何技术方案会是一种银弹,任何东西都是有利弊的 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349.JSR380)H ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- Bean Validation规范
以下内容转载自:https://www.ibm.com/developerworks/cn/java/j-lo-beanvalid/ Bean Validation规范介绍 JSR303 规范(Bea ...
- springMVC使用JSR303数据校验
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免 ...
- 深入了解数据校验:Bean Validation 2.0(JSR380)
每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...
- 深入了解数据校验:Java Bean Validation 2.0(JSR380)
每篇一句 吾皇一日不退役,尔等都是臣子 相关阅读 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescri ...
随机推荐
- Ubuntu在无网络环境下,用离线源apt-get安装软件
步骤概要如下: 1.假设目标安装的是服务器A,需先准备一台正常环境,且操作系统版本与A一致的服务器B: 2.用apt-get在服务器B上下载需要安装的包,并用dpkg-scanpackages依赖打包 ...
- C++ 多线程的错误和如何避免(1)
在终止程序之前没有使用 join() 等待后台线程 前提分析:线程分为 joinable 状态和 detached 状态 添加 .join() 这句代码的时候,就表示主线程需要等待子线程运行结束回收 ...
- 【Android 逆向】【攻防世界】easyjava
1. apk 安装到手机,提示输入flag 2. jadx 打开apk看看 private static char a(String str, b bVar, a aVar) { return aVa ...
- [BUUCTF][Web][极客大挑战 2019]EasySQL 1
打开靶机对应的url 界面显示需要输入账号和密码 分别在两个输入框尝试加单引号尝试是否有sql注入的可能,比如 123' 发现两个框可以注入,因为报了个错误信息 You have an error i ...
- 项目实战:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111660400长期持续带来更多项目与技术分享, ...
- Anaconda下载安装步骤
下载地址 下载比较慢的,用迅雷下,点击复制地址,然后在迅雷里面直接创建连接 Anaconda基于python3.8 Anaconda基于python3.6的 安装步骤 没啥说的,一路安装,中间有个勾选 ...
- java基础字符串---02
String 概述 String类在java.lang包下,所以使用的时候不需要导包 String类代表字符串,java程序中的所有字符串文字(例如"abc")都被实现为此类的实例 ...
- 1-Django框架简介以及基本操作
安装 注意:安装的磁盘目录,以及后续通过Django创建目录的时候,不要出现中文,否则会出现预料之外的错误 建议:禁止套娃,即不要在A项目中创建B项目 # 如果不指定版本号,默认最新版 pip ins ...
- HTTP1.0/HTTP1.1/HTTP2.0的演进
HTTP1.0 短连接,每次请求都需要重新建立连接 不支持断点续传 HTTP1.1 支持长连接,同一个客户端连接可保持长连接,请求可在连接中顺序发出. 查看http请求头中有keepalive 参数 ...
- Java -----多线程 创建线程的方式三: 实现Callable接口----JDK 5.0 新增
1 package bytezero.thread2; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent. ...