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. 对称加密算法汇总:AES DES 3DES SM4 java 实现入门

    密码的世界 如果你是黑帮老大,平时和手下沟通,如何保证自己的信息安全呢? 在神探夏洛克的第一季中,就讲述了一个如何侦破黑帮的加密交流的故事. 这种密码利用的是密码字典. 密码本身可以是一本书,比如常见 ...

  2. Windows下,SpringBoot JDBC无法连接的问题

    问题症状 在Win7和Win10下启动时均会出现下面的错误,但是在OSX和Linux下没问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsExcepti ...

  3. DOM和BOM的区别

    DOM和BOM的区别 在浏览器中运行的JavaScript可以认为由三部分组成:ECMAScript描述了该语言的语法和基本对象,DOM文档对象模型描述了处理网页内容的方法和接口,BOM浏览器对象模型 ...

  4. Innodb 存储引擎表

    目录 索引组织表 Innodb逻辑存储结构 表空间 段 区 页 行 Innodb 行记录格式 Compact Redundant 行溢出数据 Compressed 和 Dynamic 行记录格式 ch ...

  5. GDI实现透明菜单位图

    case WM_CONTEXTMENU: { m_hMenu = CreatePopupMenu(); g_BitMap = (HBITMAP)LoadImage(NULL, L"1.bmp ...

  6. win32-CreateDIBSection的使用

    使用CreateDIBSection 可以创建一个设备无关位图 #include <windows.h> using namespace std; int main() { HDC hdc ...

  7. 正则计算器---day19

    计算下面表达式最后的结果 strvar = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))& ...

  8. Kotlin return@xxx 的坑

    Kotlin Return 到标签 先看例子: (1..5).forEach { if (it == 3) { return@forEach } println(it) } println(" ...

  9. 全表查询sql执行链路排查

    问题描述: 发现有sql查询全表数据,慢查询语句,根据druid上的sql监控查看到. 主要根据标红的列确定问题sql. 点击进去可以看到详细sql信息. 问题排查目标: 发现这个语句高层调用方特别多 ...

  10. 【Azure Key Vault】Key Vault能不能生成DigiCert证书?能不能自动 Rotate 证书呢?

    问题描述 因为Azure Key Vault服务上保管的证书可以轻松的与其他Azure服务集成使用,所以需要知道 Key Vault 能不能生成 DigiCert 证书?能不能自动 Rotate 证书 ...