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. Buffer Queue原理

    BufferQueue详解 原理一.BufferQueue 简介在工作中,我们经常会和Surface,ImageReader,ImageWriter BufferQueue打交道,它们之间是什么关系呢 ...

  2. openai chatGPT 原理通俗介绍

    引言 近年来,随着深度学习技术的不断发展,自然语言处理(NLP)领域取得了长足的进步.ChatGPT(Generative Pre-trained Transformer)作为一种先进的语言生成模型, ...

  3. 2022年3月核心库MySQL优化总结

    2021年9月底到新公司,公司核心数据库,以前无专业DBA维护,问题多,隐患大,到2022年2月持续后,优化至今: 优化大项: 1,从1主3从,扩容到1主5从,将部分读放都另外新加从库   2,最大表 ...

  4. Oracle 中LONG RAW BLOB CLOB类型介绍

    说明: RAW: 未加工类型,可存储二进制数据或字节符 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列[不建议使用] LONG ...

  5. win32 - Session 0 隔离

    在Windows XP,Windows Server 2003和Windows操作系统的早期版本中,所有服务都与登录控制台的第一个用户在同一会话中运行.该会话称为会话0.在会话0中一起运行服务和用户应 ...

  6. HTTP1.0/HTTP1.1/HTTP2.0的演进

    HTTP1.0 短连接,每次请求都需要重新建立连接 不支持断点续传 HTTP1.1 支持长连接,同一个客户端连接可保持长连接,请求可在连接中顺序发出. 查看http请求头中有keepalive 参数 ...

  7. 设置 sudo 无需输入密码

    * 设置 sudo 无需输入密码,如下:* [root@localhost ~]# visudo* 在"root ALL=(ALL) ALL"这一行下面,再加入一行:* 将原来的: ...

  8. 为SQL Server配置连接加密

    前言 很多客户在对数据库做安全审计时要求配置连接加密,本文就如何配置加密以及使用证书做一个系统的整理. 连接加密 首先,连接加密不是透明数据加密,很多人经常把两个概念混淆.连接加密是指客户端程序和SQ ...

  9. Java this关键字使用 详解+ 证明

    1 package com.bytezero.thistest; 2 /** 3 * 4 * @Description 5 * @author Bytezero·zhenglei! Email:420 ...

  10. Socket编程:htons()、htonl()、ntohs()、ntohl()

    前言 在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons().htonl().ntohs().ntohl(). 查阅资料得知,这是涉及到网 ...