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的学习的更多相关文章

  1. Java数据校验(Bean Validation / JSR303)

    文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...

  2. springboot使用hibernate validator校验,Bean Validation校验

    第一个地址:springboot使用hibernate validator校验,Bean Validation校验

  3. Bean Validation完结篇:你必须关注的边边角角(约束级联、自定义约束、自定义校验器、国际化失败消息...)

    每篇一句 没有任何技术方案会是一种银弹,任何东西都是有利弊的 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349.JSR380)H ...

  4. Spring官网阅读(十七)Spring中的数据校验

    文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...

  5. 《Java从入门到放弃》入门篇:springMVC数据校验

    昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...

  6. Bean Validation规范

    以下内容转载自:https://www.ibm.com/developerworks/cn/java/j-lo-beanvalid/ Bean Validation规范介绍 JSR303 规范(Bea ...

  7. springMVC使用JSR303数据校验

    JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...

  8. 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知

    乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免 ...

  9. 深入了解数据校验:Bean Validation 2.0(JSR380)

    每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...

  10. 深入了解数据校验:Java Bean Validation 2.0(JSR380)

    每篇一句 吾皇一日不退役,尔等都是臣子 相关阅读 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescri ...

随机推荐

  1. spring boot实现验证码登录

    内容比较简单,需要完整项目的朋友留下邮箱,给你们发. 直接看效果: 下面是实现步骤 1.验证码生成工具类(引用自网络) package com.laoxu.test.helloweb.util; im ...

  2. win10下开启IIS部署网站

    今天测试一个有关IIS的安全漏洞用了下win10下的IIS,记录一下,供网友参考. 1.启用IIS 依次点开: 控制面板-----程序----启用或关闭Windows功能 以下图片中打钩的地方全勾上. ...

  3. win32 - 使用Desktop Duplication API复制桌面图像

    该代码来源于codeproject,经过测试发现,在屏幕处于旋转的情况下捕获的图像是黑色的.暂时没有找到原因. 代码开箱即用, #define WIN32_LEAN_AND_MEAN #include ...

  4. 【Android 逆向】【攻防世界】人民的名义-抓捕赵德汉1-200

    1. 这一题下载下来是个jar文件,感觉很android关系不大,但还是放在了mobile这个分类下了 2. 直接java jar运行,提示需要输入密码 # java -jar 169e139f152 ...

  5. python实用模块之netifaces获取网络接口地址相关信息

    文档 https://pypi.org/project/netifaces/ 安装 pip install netifaces 使用 import netifaces netifaces.interf ...

  6. 记录一个错误:Unable to find a match: python-dev

    今天尝试在Linux下运行一个Python项目,在安装requirements.txt时报错 执行命令如下: [root@VM-16-8-centos cve-search]# pip3 instal ...

  7. 【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?

    通过PSLIST查看Windwos中的进程信息及线程信息 一:下载PSLIST小工具:https://docs.microsoft.com/en-us/sysinternals/downloads/p ...

  8. 【Azure 应用服务】App Service for Linux环境中,如何解决字体文件缺失的情况

    问题描述 部署在App Service for Linux环境中的Web App.出现了字体文件缺失的问题,页面显示本来时中文的地方,区别变为方框占位. 问题分析 在应用中,通常涉及到显示问题的有两个 ...

  9. 【Azure 存储服务】Storage Account Blob 使用REST API如何获取磁盘大小(Content-Length), IOPS信息

    问题描述 1)关于使用Rest API获取非托管磁盘信息比如获取磁盘大小 2)关于使用Rest API获取非托管磁盘信息比如iops 问题答案 #1:关于使用Rest API获取非托管磁盘信息比如获取 ...

  10. 【Azure 应用服务】Function App中的函数(Functions)删除问题

    问题描述 Function App 中的函数如何删除问题 问题分析 1)在Function App的门户上,点击"Delete"进行删除 2) 进入Function App的高级管 ...