基于SpringBoot服务端表单数据校验的实现方式

SpringBoot服务端表单数据校验

(SpringBoot高级)

一、实现添加用户功能

1 创建项目

2 修改POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.10.RELEASE</version>
 </parent>
 <groupId>com.bjsxt</groupId>
 <artifactId>13-spring-boot-validate</artifactId>
 <version>0.0.1-SNAPSHOT</version>

 <properties>
  <java.version>1.7</java.version>
  <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
  <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>
 </properties>

 <dependencies>
  <!-- springBoot的启动器 -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!-- thymeleaf的启动器 -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
 </dependencies>
</project>

3 编写添加用户功能

3.1 创建实体类

publicclass Users {
 private String name;
 private String password;
 private Integer age;
 public String getName() {
  returnname;
 }
 publicvoid setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  returnpassword;
 }
 publicvoid setPassword(String password) {
  this.password = password;
 }
 public Integer getAge() {
  returnage;
 }
 publicvoid setAge(Integer age) {
  this.age = age;
 }
 @Override
 public String toString() {
  return"Users [name=" + name + ", password=" + password + ", age=" + age + "]";
 }

}

3.2 编写Controller

/**
 * SpringBoot 表单数据校验
 *
 *
 */
@Controller
publicclass UsersController {

 @RequestMapping("/addUser")
 public String showPage(){
  return"add";
 }

 /**
  * 完成用户添加
  */
 @RequestMapping("/save")
 public String saveUser(Users users){
  System.out.println(users);
  return"ok";
 }
}

3.3 编写页面add.html ok.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
 <form th:action="@{/save}" method="post">
  用户姓名:<input type="text" name="name"/><br/>
  用户密码:<input type="password" name="password" /><br/>
  用户年龄:<input type="text" name="age" /><br/>
  <input type="submit" value="OK"/>
 </form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>操作成功</title>
</head>
<body>
 OK。。。。
</body>
</html>

二、SpringBoot对表单做数据校验

1 SpringBoot对表单数据校验的技术特点

1.1 SpringBoot中使用了Hibernate-validate校验框架

2 SpringBoot表单数据校验步骤

2.1 在实体类中添加校验规则

publicclass Users {
 @NotBlank//非空校验
 private String name;
 @NotBlank//密码非空校验
 private String password;
 private Integer age;
 public String getName() {
  returnname;
 }
 publicvoid setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  returnpassword;
 }
 publicvoid setPassword(String password) {
  this.password = password;
 }
 public Integer getAge() {
  returnage;
 }
 publicvoid setAge(Integer age) {
  this.age = age;
 }
 @Override
 public String toString() {
  return"Users [name=" + name + ", password=" + password + ", age=" + age + "]";
 }
}

2.2 在Controller中开启校验

/**
  * 完成用户添加
  *@Valid开启对Users对象的数据校验
  *BindingResult:封装了校验的结果
  */
 @RequestMapping("/save")
 public String saveUser(@Valid Users users,BindingResult result){
  if(result.hasErrors()){
   return"add";
  }
  System.out.println(users);
  return"ok";
 }

2.3 在页面中获取提示信息

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
 <form th:action="@{/save}" method="post">
  用户姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/>
  用户密码:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/>
  用户年龄:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/>
  <input type="submit" value="OK"/>
 </form>
</body>
</html>

2.4 遇到异常

在jsp当中,如果一个对象根本不存在,那么他仍然可以在jsp页面进行遍历,只不过为空,不显示而已,但是在thymeleaf当中,如果说这个对象不存在,他就会报以下错误,解决问题的办法就是在controller中的方法上的传递参数加上这个对象,以便在thymeleaf视图层当中,告知这个对象是存在于的

三、解决数据校验时的异常问题

解决异常的方法,在跳转页面的方法中注入一个对象,来解决问题。要求参数对象的变量名必须是对象的类名的全称首字母小写。

在springboot 1.5当中,参数变量必须是对象类的名称首字母小写,但是在springboot2.0以上,已经很大程度上优化了这个问题,变量名称随便写,因为在跳转页面的时候,将该对象放入到Model当中传递,他的key 就是对象的类的全程首字母大写(默认),在thymeleaf当中取出这个值的时候,他的key为对象的类的全程首字母大写,与参数的变量名无任何关系 如果非要更改Model当中的key值,一下有详解

代码

/**
  * 解决异常的方式。可以在跳转页面的方法中注入一个Uesrs对象。
  * 注意:由于springmvc会将该对象放入到Model中传递。key的名称会使用该对象的驼峰式的命名规则来作为key。
  * 参数的变量名需要与对象的名称相同。将首字母小写。
  *
  * @param users
  * @return
  */
 @RequestMapping("/addUser")
 public String showPage( Users users){
  return"add";
 }
/**
  * 完成用户添加
  *@Valid开启对Users对象的数据校验
  *BindingResult:封装了校验的结果
  */
 @RequestMapping("/save")
 public String saveUser( @Valid Users users,BindingResult result){
  if(result.hasErrors()){
   return"add";
  }
  System.out.println(users);
  return"ok";
 }
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
 <form th:action="@{/save}" method="post">
  用户姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/>
  用户密码:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/>
  用户年龄:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/>
  <input type="submit" value="OK"/>
 </form>
</body>
</html>

如果参数的名称需要做改变

 /**
  *
  * 如果想为传递的对象更改名称,可以使用@ModelAttribute("aa")这表示当前传递的对象的key为aa。
  * 那么我们在页面中获取该对象的key也需要修改为aa
  * @param users
  * @return
  */
 @RequestMapping("/addUser")
 public String showPage(@ModelAttribute("aa") Users users){
  return"add";
 }
/**
  * 完成用户添加
  *@Valid开启对Users对象的数据校验
  *BindingResult:封装了校验的结果
  */
 @RequestMapping("/save")
 public String saveUser(@ModelAttribute("aa") @Valid Users users,BindingResult result){
  if(result.hasErrors()){
   return"add";
  }
  System.out.println(users);
  return"ok";
 }
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body>
 <form th:action="@{/save}" method="post">
  用户姓名:<input type="text" name="name"/><font color="red" th:errors="${aa.name}"></font><br/>
  用户密码:<input type="password" name="password" /><font color="red" th:errors="${aa.password}"></font><br/>
  用户年龄:<input type="text" name="age" /><font color="red" th:errors="${aa.age}"></font><br/>
  <input type="submit" value="OK"/>
 </form>
</body>
</html>

四、其他校验规则

@NotBlank: 判断字符串是否为null或者是空串(去掉首尾空格)。

@NotEmpty: 判断字符串是否null或者是空串。

@Length: 判断字符的长度(最大或者最小)

@Min: 判断数值最小值

@Max: 判断数值最大值

@Email: 判断邮箱是否合法

补充知识:控制Configuration是否生效,使用Springboot中@ConditionalOnProperty注解

介绍

@ConditionalOnProperty注解的作用是来控制Configuration是否生效

通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。

matchIfMissing来控制默认值

如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。

如果返回值为false,则该configuration不生效;为true则生效。

使用

shardingjdbc中可以控制是否启用,这样可以针对某个配置来启动数据源,完全不影响代码实现,想完成这个功能就要用到Stringboot提供的注解@ConditionalOnProperty

因为默认是true,所以使用可以忽略,但是如果不需要使用,禁用则需要增加配置

spring.shardingsphere.enabled=false

以上这篇基于SpringBoot服务端表单数据校验的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring mvc服务端数据校验实现流程详解

    B/S 系统中对http 请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,实际上,几乎所有的系统,凡是涉及到数据校验,都需要在服务端进行二次校验.为什么要在服务端进行二次校验呢?这需要理解客户端校验和服务端校验各自的目的. 客户端校验,我们主要是为了提高用户体验,例如用户输入一个邮箱地址,要校验这个邮箱地址是否合法,没有必要发送到服务端进行校验,直接在前端用 js 进行校验即可.但是大家需要明白的是,前端校验无法代替后端校验

  • springMVC如何对输入数据校验实现代码

    前言 数据的校验是交互式网站一个不可或缺的功能,数据验证分为客户端验证和服务器端验证.前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验:但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已,服务器端验证是整个应用阻止非法数据的最后防线,通过在应用中编程实现. 客户端验证在大多数情况下,使用 JavaScript 进行客户

  • Spring Boot 通过注解实现数据校验的方法

    一.依赖 <!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> &l

  • SpringBoot基于SpringSecurity表单登录和权限验证的示例

    一.简介 上篇介绍了一个自己做的管理系统,最近空闲的时间自己在继续做,把之前登录时候自定义的拦截器过滤器换成了基于SpringSecurity来做,其中遇到了很多坑,总结下,大家有遇到类似问题的话就当是为大家闭坑吧. 二.项目实现功能和成果展示 首先来看下登录界面:这是我输入的一个正确的信息,点击登录后SpringSecurity会根据你输入的用户名和密码去验证是否正确,如果正确的话就去你定义的页面,我这里定义的是查询教师信息页面.来看下代码吧. 三.准备工作(前台页面.实体类) 实体类Teac

  • 基于SpringBoot服务端表单数据校验的实现方式

    SpringBoot服务端表单数据校验 (SpringBoot高级) 一.实现添加用户功能 1 创建项目 2 修改POM文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:

  • SpringBoot服务端数据校验过程详解

    这篇文章主要介绍了SpringBoot服务端数据校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证.为什么这么说呢?往往我们在编写程序的时候都会感觉后台的验证无关紧要,毕竟客户端已经做过验证了,后端没必要在浪费资源对数据进行验证了,但恰恰是这种思维最为容易

  • hibernate-validator后端表单数据校验的使用示例详解

    目录 hibernate-validator后端表单数据校验的使用 1.hibernate-validator介绍 2.hibernate-validator常用注解 3. hibernate-validator入门案例 3.1.第一步:创建maven工程hibernate-validator_demo并配置pom.xml文件 3.2.创建实体类 3.3.创建UserController 3.4.创建项目启动类 3.5.创建application.yml配置文件 4.启动项目测试 4.1.删除控

  • Yii2基于Ajax自动获取表单数据的方法

    本文实例讲述了Yii2基于Ajax自动获取表单数据的方法.分享给大家供大家参考,具体如下: 这里有两张表,表结构如下,locations表存放的省份和邮编等信息,两张表的model和curd均使用gii生成 yii2advanced.customers表 customer_id:int(11) customer_name:varchar(100) zip_code:varchar(20) city:varchar(100) province:varchar(100) yii2advanced.l

  • 基于Vue 服务端Cookies删除的问题

    一般在我们做项目时,我们都会通过POST请求拿到服务器给到的set-Cookies,保存在浏览器的Cookie里 这里需要明确一点.缓存有三类 cookie. sessionStorage .localStorage cookie: 存储在用户本地终端上的数据.有时也用cookies,指某些网站为了辨别用户身份,进行session跟踪而存储在本地终端上的数据,通常经过加密.一般应用最典型的案列就是判断注册用户是否已经登过该网站. 另外两种是HTML5提供的: 不参与和服务器的通信: localS

  • js前端表单数据处理表单数据校验

    目录 前言 1.数据处理 1.1 场景1 :过滤我不要的数据 1.2 场景2:只提取我要的数据 1.3 场景3 :覆盖数据 1.4 场景4 :字段映射 1.5 场景5 : 数据映射 1.6 场景6: 数据合并 2.表单校验 2.1 简单版的单字段检查 2.2 简单版的多字段检查 2.3 Iview 组件库 form表单组件的校验实现 2.4 element 组件库 ElForm表单组件的校验实现 2.5 常见校验规则 前言 这段时间一直在搞to B方向中后台的项目,表单接触的频率会比较多,就突发

  • Springboot接收 Form 表单数据的示例详解

    目录 一.接收 Form 表单数据 1,基本的接收方法 2,参数没有传递的情况 3,使用 map 来接收参数 4,接收一个数组 5,使用对象来接收参数 6,使用对象接收时指定参数前缀 二.接收字符串文本数据 三.接收 JSON 数据 1,使用 Map 来接收数据 2,使用 Bean 对象来接收数据 一.接收 Form 表单数据 1,基本的接收方法 (1)下面样例Controller接收form-data格式的POST数据: import org.springframework.web.bind.

  • validate 注册页的表单数据校验实现详解

    目录 1.注册页是什么 2.为什么需要注册页 3.注册页如何实现 3.1分析业务需求 3.2获取数据 v-model双向绑定 3.3校验数据 3.4method中的发送数据 3.5处理数据 4总结 1.注册页是什么 当我们使用一个从未使用过的网站时,想要注册账号,点击注册账号时看到的网页就是注册页注册页例子如下: 我们看到以下的注册页中,有两大类信息: 第一大类是用户信息类, 包括用户名,密码和email,他们都有自己的 取值规则 ,例如用户名显示不得小于3个字符 第二大类是验证码类,一般有两种

  • 基于SpringBoot生成二维码的几种实现方式

    目录 一.基于Google开发工具包ZXing生成二维码 二.基于开源的Hutool工具生成二维码 本文将基于Spring Boot介绍两种生成二维码的实现方式,一种是基于Google开发工具包,另一种是基于Hutool来实现: 为了方便理解二维码的实际应用场景,举一些例子! (1)进销存系统 想必大家都听说过,其系统中的商品二维码承载了许多重要.核心的关键信息,比如商品编码.商品名称.规格.型号.单位.作用/使用说明等信息:操作者可以借助硬件设备,如“扫码枪”,通过扫描该二维码后将该商品录入到

  • 基于vue-ssr服务端渲染入门详解

    第一部分 基本介绍 1.前言 服务端渲染实现原理机制:在服务端拿数据进行解析渲染,直接生成html片段返回给前端.然后前端可以通过解析后端返回的html片段到前端页面,大致有以下两种形式: 1.服务器通过模版引擎直接渲染整个页面,例如java后端的vm模版引擎,php后端的smarty模版引擎. 2.服务渲染生成html代码块, 前端通过AJAX获取然后使用js动态添加. 2.服务端渲染的优劣 服务端渲染能够解决两大问题: 1.seo问题,有利于搜索引擎蜘蛛抓取网站内容,利于网站的收录和排名.

随机推荐