在前台表单验证的时候,通常会校验一些数据的可行性,比如是否为空,长度,身份证,邮箱等等,那么这样是否是安全的呢,答案是否定的。因为也可以通过模拟前台请求等工具来直接提交到后台,比如postman这样的工具,那么遇到这样的问题怎么办呢,我们可以在后台也做相应的校验。

新建项目,因为本文会使用postman模拟前端请求,所以本文需要加入web依赖,pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.dalaoyang</groupId><artifactId>springboot_validator</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot_validator</name><description>springboot_validator</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

创建一个demo类,说一下本文使用demo中校验使用的注解:
@NotEmpty:非空
@Length:长度,最长或者最短
@Email:校验email
@Pattern:使用正则校验,本文使用的是身份证的正则
,代码如下:

package com.dalaoyang.entity;import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;import javax.validation.constraints.Pattern;
import java.io.Serializable;/*** @author dalaoyang* @Description* @project springboot_learn* @package com.dalaoyang.entity* @email yangyang@dalaoyang.cn* @date 2018/5/1*/
public class Demo implements Serializable {@NotEmpty(message="用户名不能为空")@Length(min=6,max = 12,message="用户名长度必须位于6到12之间")private String userName;@NotEmpty(message="密码不能为空")@Length(min=6,message="密码长度不能小于6位")private String passWord;@Email(message="请输入正确的邮箱")private String email;@Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份证格式错误")private String idCard;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;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard = idCard;}}

创建一个TestDemoController,来测试本文的校验,代码如下:

package com.dalaoyang.controller;import com.dalaoyang.entity.Demo;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;
import java.util.List;/*** @author dalaoyang* @Description* @project springboot_learn* @package com.dalaoyang.controller* @email yangyang@dalaoyang.cn* @date 2018/5/1*/
@RestController
public class TestDemoController {@PostMapping("/")public String testDemo(@Valid Demo demo,BindingResult bindingResult){StringBuffer stringBuffer = new StringBuffer();if(bindingResult.hasErrors()){List<ObjectError> list =bindingResult.getAllErrors();for (ObjectError objectError:list) {stringBuffer.append(objectError.getDefaultMessage());stringBuffer.append("---");}}return stringBuffer!=null?stringBuffer.toString():"";}
}

启动项目使用postman分别做了三次请求,第一次所有属性都是随便填写的,如图

image

第二次输入正确的身份证和邮箱,用户名和密码为空,如图

image

第三次全部输入正确,如图

image

本文只是使用的简单的几种校验,Hibernate-validator还有很多种校验的方法,大家可以参考这篇文章https://blog.csdn.net/xgblog/article/details/52548659

源码下载 :大老杨码云

个人网站:https://www.dalaoyang.cn

SpringBoot使用validator校验相关推荐

  1. springboot 配置 Validator 校验框架国际化 支持快速返回

    1.国际化资源 使用IDEA创建资源组 2.编写配置 application.yml 增加国际化目录配置 增加国际化配置类 从请求头获取多语言关键字 /*** 国际化配置** @author Lion ...

  2. springboot使用hibernate validator校验

    回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...

  3. SpringBoot中使用Hibernate Validator校验工具类

    1.说明 在Spring Boot已经集成Hibernate Validator校验器的情况下, 对于配置了校验注解的请求参数, 框架会自动校验其参数, 但是如果想手动校验一个加了注解的普通对象, 比 ...

  4. SpringBoot的参数校验器 - Validator

    1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...

  5. SpringBoot后端数据校验实战

    本文从本人博客搬运,原文格式更加美观,可以移步原文阅读:SpringBoot后端数据校验实战 一般我们会在Controller的接口中对前端传递的参数做数据校验,这是一个后端开发人员的基本素养 在Sp ...

  6. SpringBoot - 使用Assert校验让业务代码更简洁

    文章目录 Pre 有了Validator框架,还要Assert干啥子 org.springframework.util.Assert 对象和类型断言 文本断言 逻辑断言 Collection和map断 ...

  7. 校验json格式_不来学一下SpringBoot统一参数校验?

    微服务架构之春招总结:SpringCloud.Docker.Dubbo与SpringBoot 一个SpringBoot问题就干趴下了?我却凭着这份PDF文档吊打面试官. 金三银四第一天,啃透这些Spr ...

  8. 粉丝说SpringBoot集成validation校验参数有坑,我试了试

    公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑. 原留言如下: 有坑,你试试^A-\\d{12}-\\d{4}$,这条正则经过validate这个方 ...

  9. springboot中参数校验(validation)使用

    文章目录 介绍: validation引入 可用约束(constraint) 应用实战 实体类 接口参数型 约束生效 实体型 介绍: 在开发中,会经常需要进行参数的校验,比如接口层.业务层.持久层等, ...

最新文章

  1. 细说Debug和Release区别
  2. 再见了,收费的Navicat。
  3. JavaWeb项目中如何扩展一个Request对象——包装器HttpServletRequestWrapper
  4. Vue——[Props with type Object/Array must use a factory function to return the default value.]解决方案
  5. (原)Ubuntu14中安装GraphicsMagick
  6. oracle10g中获得可更新的(修改、增加等) ResultSet
  7. DB2之CLOB对象用法
  8. 一周第三次课(10月18日)
  9. 软件测试简历没有项目经验怎么写?
  10. [转]如何在Web页面上直接打开、编辑、创建Office文档
  11. Mac系统内存越来越大?Mac内存清理技巧
  12. 实验7-3-8 输出大写英文字母
  13. Python探路-多重继承
  14. python爬虫笔记第一章(基于路飞学城课程)
  15. Google Draco 源码解析
  16. centos7 查看本地ip地址
  17. python预处理c语言_C语言预处理器
  18. Java选择结构之switch
  19. mysql 截取括号内字符串_Mysql字符串截取_获取指定字符串中的数据
  20. matlab语句xlim,matlab中设置坐标轴时xlim和axis有什么区别?

热门文章

  1. DFF(deep feature flow for video recognition)论文详读
  2. 以现在的你,拿什么去谈梦想?
  3. 游戏编程学习之项目历程
  4. 猜字小游戏java方法体_java实现猜字小游戏
  5. 小程序之战,泡沫之后鹿死谁手?
  6. 关于remove和removeat
  7. Microsoft edge初始页面设置
  8. ROSwiki更正 — 创建ROS消息和ROS服务
  9. Activiti7基础
  10. 爱死磕:8月30日市场策略最高38个点!