系列文章目录

SpringBoot框架


文章目录

  • 系列文章目录
  • 前言
  • 一、创建项目
  • 二、常用注解
  • 三、测试运行
    • 1.创建验证接口类
    • 2.创建DTO类
    • 3.创建控制器类
    • 4.运行效果
    • 5.获取验证结果

前言

Spring Boot Validation是Spring Boot整合了Hibernate Validation的一个框架, 其核心是Hibernate Validation,
此框架的作用: 检验客户端向服务器端提交的请求参数的基本格式是否合法


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建项目

创建Spring Boot工程, 名称为Validation, 在创建过程中勾选web > Spring web和IO > Validation这两个依赖项


二、常用注解

  • @NotNull : 不允许为null值, 如果客户端提交的参数中根本没有这一项, 则视为null
  • @NotBlank : 不允许为空白值, 空白值包括由若干个空格、TAB符等组成的字符
  • @NotEmpty : 不允许为空字符串, 即不允许是长度为0的字符串
  • @pattern : 可用正则验证

还有像max, min ,size等注解…

三、测试运行

1.创建验证接口类

如果使用Validation验证请求参数的基本格式是否和法, 需要将参数封装进自定义类中, 因为验证规则被频繁使用, 而且不改变, 在使用中一般声明为接口, 使需要验证的实体类实现接口

在根包下创建valid包, 并新建接口类: RegExpression 和 UserLoginRegExpression

package cn.qiangtian.validation.pojo.valid;/*** <p>正则表达式的根级接口, 定义了通用的正则表达式和提示文本</p>** <p>使用接口主要是为了便于定义常量, 并利于相关类实现, 以简化在类中使用常量的语法</p>*/
public interface RegExpression {}
package cn.tedu.csmall.pojo.valid;/*** <p>属性数据的表达式接口,定义了相关的正则表达式和提示文本</p>** <p>使用接口主要是为了便于定义常量,并利于相关类实现,以简化在类中使用常量的语法</p>*/
public interface AttributeRegExpression extends RegExpression {String REGEXP_NAME = ".{2,6}";String MESSAGE_NAME = "名称必须由2~16字符组成!";String REGEXP_VALUE_LIST = ".{0,255}";String MESSAGE_VALUE_LIST = "备选值列表的长度不得超过255字符!";String REGEXP_UNIT = ".{0,6}";String MESSAGE_UNIT = "计量单位的长度不得超过6字符!";}

2.创建DTO类

在根包下创建dto包, 并新建 UserLoginDTO 类:

package cn.qiangtian.validation.pojo.dto;import cn.qiangtian.validation.pojo.valid.UserLoginRegExpression;import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;public class UserLoginDTO implements UserLoginRegExpression {@NotNull(message = MESSAGE_NULL_USERNAME)@Pattern(regexp = REGEXP_USERNAME,message = MESSAGE_USERNAME)private String username;@NotNull(message = MESSAGE_NULL_PASSWORD)@Pattern(regexp = REGEXP_PASSWORD,message = MESSAGE_PASSWORD)private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "UserLoginDTO{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

3.创建控制器类

在根包下创建controller包, 并新建UserCotroller类:

package cn.qiangtian.validation.controller;import cn.qiangtian.validation.pojo.dto.UserLoginDTO;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;@RestController
public class UserController {// http://localhost:8080/login?username=root&password=12345678@RequestMapping("/login")public String login(@Valid UserLoginDTO userLoginDTO){System.out.println("userLoginDTO = " + userLoginDTO);return "登录成功";}
}

4.运行效果

项目结构

启动项目, 客户端访问http://localhost:8080/login?username=root&password=12345678

如果用户名不和规范, 访问时会抛出BindException绑定异常: http://localhost:8080/login?username=1&password=12345678


如果用户名与密码同时验证不通过, 访问时会抛出1个BindException异常和2个错误的信息 : http://localhost:8080/login?username=1&password=1

5.获取验证结果

在控制器中, 当需要获取验证失败时的提示文本时, 需要在被验证的参数右侧添加BindingResult参数(必须添加在被验证对象的右侧, 中间不可以添加其他参数)

package cn.qiangtian.validation.controller;import cn.qiangtian.validation.pojo.dto.UserLoginDTO;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;@RestController
public class UserController {// http://localhost:8080/login?username=root&password=12345678@RequestMapping("/login")public String login(@Valid UserLoginDTO userLoginDTO, BindingResult bindingResult){// 判断验证是否不通过boolean hasErrors = bindingResult.hasErrors();System.out.println("验证是否不通过: " + hasErrors);if (bindingResult.getFieldError() != null){// 获取验证失败的提示文本, 如有多个条件没有被满足, 则不确定是哪个提示文本String defaultMessage = bindingResult.getFieldError().getDefaultMessage();System.out.println("错误提示: " + defaultMessage);}return "登录成功";}
}

此时提交验证不通过的请求, 获取到错误的提示, 由于多个验证不通过, 也不确定, 但是只要方法上声明了验证结果的参数, 页面就会处理到登录成功, 不会抛出BindException异常

Validation框架相关推荐

  1. Validation框架的应用

    一,前言 这篇博客只说一下Validation框架的应用,不涉及相关JSR,相关理论,以及源码的解析. 如果之后需要的话,会再开博客描写,这样会显得主题突出一些. 后续扩展部分会解释message,g ...

  2. 【在SpringBoot项目中使用Validation框架检查数据格式-常用的检查注解】

    常用的检查注解 使用Validation框架检查数据格式时,常用的检查注解有: @NotNull:不允许为null值 可用于任何类型的参数 @NotEmpty:不允许为空字符串,即长度为0的字符串 仅 ...

  3. 使用Validation框架检查数据格式

    1. 添加依赖 在pom.xml中添加spring-boot-starter-validation依赖项: <!-- Spring Boot Validation框架,用于检查数据格式 --&g ...

  4. 【在SpringBoot项目中使用Validation框架检查数据格式】

    目录 1. 添加依赖 2. 检查POJO类型的请求参数 3. 关于响应的消息文本 4.  快速失败 5. 检查未封装的请求参数 1. 添加依赖 在pom.xml中添加spring-boot-start ...

  5. 通过Validation框架检查请求参数的基本格式

    通过Validation框架检查请求参数的基本格式 1.1. 添加依赖 Spring Validation框架可用于在服务器端检查请求参数的基本格式(例如是否提交了请求参数.字符串的长度是否正确.数字 ...

  6. SpringBoot使用Validation框架完成参数校验AND异常处理

    关于Validation框架:(官方简介) 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的 ...

  7. Spring Validation验证框架参数验证 @Validated 和 @Valid 的区别

    参数验证 @Validated 和 @Valid 的区别 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303 规范,是标准 JSR- ...

  8. @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated...

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

  9. validation检查框架

    1.导入validation检查框架 在pom.xml文件中导入依赖: <!-- Spring Boot Validation框架,用于检查数据格式 --> <dependency& ...

最新文章

  1. ubuntu安装thrift
  2. flask第十八篇——模板【2】
  3. mysql grant 语法格式_MySQL grant 语法的详细解析
  4. 使用Node.js部署智能合約(Smart Contract)
  5. DevExpress 中 在做全选的全消功能的时候 加快效率
  6. 后端技术:Nginx从安装到高可用,看完本篇就够了!
  7. wikioi 1306 机智Trie树
  8. 洛谷——P2077 红绿灯
  9. ajax json 渲染 html,jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
  10. [论文评析] ArXiv,2021, Focal Self Attention技术分析
  11. pkr车牌识别系统服务器,交安通PKR停车场车牌识别管理系统
  12. 【译】雄迈摄像头爆出Mirai僵尸网络
  13. 射频光纤传输及宽带射频光纤传输系统介绍
  14. 二层交换机与三层交换机的区别
  15. mysql limt取指定数据条数 top取指定数据条数
  16. 浅谈OCR之Onenote 2010
  17. 台湾华夏堂古代玉器收藏家~件件珍贵难得一见
  18. 计算机程序 申请专利,计算机程序能申请专利吗
  19. 滚动截屏苹果_苹果手机上的5个神器,让你的手机更高效,顺手
  20. tensorflow--猫狗识别

热门文章

  1. Java短信确认机制_JAVA 消息确认机制之 ACK 模式
  2. iOS adhoc 版本App 如何制作安装
  3. CSS——网易云音乐首页之热门推荐歌单的制作
  4. LIMS和TDM比较分析
  5. java 控制面板,Java9 控制面板
  6. 云原生时代,OAM模型加持下的应用交付与管理实践
  7. java网课|匿名对象Random对象数组
  8. Linux kali系统使用fcrackzip/rarcrack破解zip/rar(或者zip 7z)类型的加密压缩文件
  9. matlab偏最小二乘截距,matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR)
  10. 更改Ubuntu软件镜像为清华镜像