关于数据校验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 ...
随机推荐
- NVME(学习笔记八)—Asymmetric Namespace Report
8.20 非对称namespace访问报告 8.20.1 非对称namespace访问报告概况 非对称Namespace访问(ANA)在如下场景下产生,基于访问这个namespace的controll ...
- 前端学习 node 快速入门 系列 —— 项目版权格式化
其他章节请看: 前端学习 node 快速入门 系列 项目版权格式化 需求 替换整个项目的版权信息,替换文件为 .c 和 .h 结尾. 分析 版权信息通常都在文件开头,通过是否有 copyright 来 ...
- Ubuntu20.04下的ESP8266环境
硬件说明 ESP8266使用的是3.3V供电, 和Arduino不一样, ESP8266的I/O脚是不能防5V的, 连上就烧. 其输出只有12mA, 而Arduino是20-40mA. ESP8266 ...
- python中两个不同shape的数组间运算规则
1 前言 声明:本博客讨论的数组间运算是指四则运算,如:a+b.a-b.a*b.a/b,不包括 a.dot(b) 等运算,由于 numpy 和 tensorflow 中都遵循相同的规则,本博客以 nu ...
- 用ELK分析每天4亿多条腾讯云MySQL审计日志(1)--解决过程
前言: 该文章将会介绍以下: 1,快速分析SQL日志的几种方法 2,使用mysql的全文索引快速分析少量SQL审计 3,准确快速分析4亿多条审计SQL日志(过程和最终解决方案) 公司核心库拆 ...
- Linux 下配置Oracle开机自动启动
一./etc/oratab说明 直接使用cat 查看这个文件: gg1:/home/oracle> cat /etc/oratab # # This file is used by ORACLE ...
- 【树莓派】拷贝系统到新SD卡(系统备份/部署到另一台树莓派上)适用ubuntu 20.04.3
本教程适用ubuntu 20.04.3 其他版本也大同小异.这种方法能更快的将系统部署下去,如果重新安装一遍加上各种配置相信你会比较疯狂即使做了自动化脚本! 一.树莓派sd卡拷贝 把旧SD卡插入树莓派 ...
- tomcat启动错误“The temporary upload location”
目录 问题的原因 解决方案 临时的,直接重新启动项目就行,会重新建立临时文件夹 在配置文件中配置tomcat的临时目录: 写个配置类,通过@Bean的方式配置目录: 问题的原因 在Linux 系统中, ...
- 【Azure 应用服务】Web.config中设置域名访问限制,IP地址限制访问特定的页面资源 (Rewrite)
问题描述 问题一:web app已经绑定了域名,例如是www.a.com,现在只允许使用www.a.com 访问,如果使用默认的域名xxxx.chinacloundsites.cn访问的时候,需要显示 ...
- 【Azure 应用服务】在Azure上部署一套VUE框架的单页面应用,有什么可以参考的文档呢?
问题描述 在Azure上部署一套VUE框架的单页面应用,有什么可以参考的文档呢? 问题回答 Azure官方上并没有VUE框架的实例代码,但是可以参考Node JS项目,来进行设置. 在 Azure 中 ...