Spring MVC(四) 数据校验

        在开发过程中有一环必不可少的部分就是数据校验,用户在页面中填写的数据通过表单提交时,前端的JS可以做一些是否合法性的验证,比如是否为空、两次密码是否一致、格式是否正确等等验证。当数据到了后台控制器,为了确保程序的健壮性,防止恶意操作,往往后台同样需要对数据进行校验。后台参数校验最简单的做法是直接在业务方法里面进行判断,当判断成功之后再继续往下执行。但这样带给我们的是代码的耦合,冗余。当我们多个地方需要校验时,就需要在每一个地方调用校验程序,导致代码很冗余,且不美观。

        如何更好的设计数据校验呢,JSR303就是为了解决这个问题出现的,接下来我们就来介绍JSR303以及Hibernate Validator等校验工具的使用。

        首先需要导入jar包:bean-validator.jar,然后只需要在相应的实体类中相应的getter方法上加入注解即可。我们通过上一节的案例中的添加操作来处理,我们规定:姓名输入不能为空,邮箱必须输入正确。可以在Employee类的name属性和email属性的getter方法上加入注解,代码如下。

@NotEmpty(message="姓名不能为空")
public String getName() {return name;
}
@Email(message="邮箱格式不正确")
public String getEmail() {return email;
}

        其中注解@NotEmpty就是表示该属性在应用的时候不能为空,注解Email就是表示该属性必须是一个正确的邮箱格式,也就是要包含“@”字符。

        关于JSR303其他各种注解的说明,如下表所示。

@Null

被注释的元素必须为null

@NotNull

被注释的元素必须不为null

@AssertTrue

被注释的元素必须为true

@AssertFalse

被注释的元素必须为false

@Min(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max,min)

被注释的元素的大小必须在指定的范围内

@Digits(integer,fraction)

被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past

被注释的元素必须是一个过去的日期

@Futura

被注释的元素必须是一个将来的日期

@Pattern(Value)

被注释的元素必须符合指定的正则表达式

        Hibernate validator 在JSR303的基础上对校验注解进行了扩展,扩展注解如下表所示。

@Email

被注释的元素必须是电子邮箱地址

@Length

被注释的字符串的大小必须在指定的范围内

@NotEmpty

被注释的字符串必须非空

@Range

被注释的元素必须在合适的范围内

        添加了注解之后,如果输入的内容不符合要求,就需要在页面中进行显示,首先在控制器方法中要执行如下操作。

@RequestMapping(value="/add", method=RequestMethod.POST)
public String add(@Validated Employee employee, BindingResult br, Model model) {//如果包含错误信息,返回到添加页面if(br.hasErrors()) {List<Department> departments = departmentService.list();model.addAttribute("departments", departments);return "employee/add";}employeeService.add(employee);return "redirect:/employee/employees";
}

        其中传入的Employee对象参数加入了注解@Validated,说明这是一个基于Validate的验证对象。同时也添加了一个参数BindingResult参数,这是用来保存错误信息。

        如果发生了错误,就会跳转到添加页面,在添加页面中只需要通过使用Spring MVC表单标签<sf:error>即可显示错误信息,具体的操作为如下所示。

<sf:form method="post" modelAttribute="employee">姓名:<sf:input path="name"/><sf:errors path="name"/><br><br>邮箱:<sf:input path="email"/><sf:errors path="email"/><br><br>部门:<sf:select path="department.id" items="${departments }" itemLabel="name" itemValue="id" style="width:140px"></sf:select><br><br>
<input type="submit" value="提交">
</sf:form>

        在添加数据的时候,如果不按照要求操作,就会提示错误,并且无法完成数据的添加操作,如图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python专家编程系列: 11.为什么在python使用__name__ == ‘__main__‘

0. 标题 Python专家编程系列: 11.为什么在python使用__name__ ‘main’ id: 104 作者: quantgalaxyoutlook.com 欢迎交流 1. 单个 python 文件中的 __name__ 是什么&#xff1f; 我们先看一个简单的python程序脚本a.py: # a.pyprint(__name__) # python a.py # _…

最直接解决 element + sortablejs 拖拽后顺序错误

直接按索引对调两行对象&#xff0c;免加row-key const oldRow this.valueMy[evt.oldIndex] this.valueMy[evt.oldIndex] this.valueMy[evt.newIndex] this.valueMy[evt.newIndex] oldRow

内网环境ubuntu设置静态ip、DNS、路由,不影响网络访问

内网环境通常是有线的&#xff0c;通过服务器的ip、mac、dns地址访问网络才生效的&#xff0c;如果ip地址变了&#xff0c;就不能访问网络了。 如果你的ip地址变了&#xff0c;或者要防止ip变更影响网络访问&#xff0c;就要设置 1、依次点击右上角的电源-设置&#xff0c;在打…

linux 正则表达式+文本三剑客

一、正则表达式 1.正则表达式的概念 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通…

公司里的“卷王”,是主动卷还是迫于无奈?

先来唠唠 “卷” 这个词是近几年流行起来的网络用语&#xff0c;它是内卷的简化形式&#xff0c;“内卷”本来是一个名不见经传的普通词语&#xff0c;经网络流传&#xff0c;很多人就用其来指代非理性的内部竞争或“被自愿”竞争。 在现代职场&#xff0c;有一群人被戏称为&…

《大学数学3(第三版)》

文章目录 [toc]第一章&#xff1a;行列式第一节|方程组与行列式二元线性方程组和二阶行列式 第二节| n n n阶行列式排列逆序数对换例题 1 1 1 n n n阶行列式 第三节|行列式的性质和计算性质 1 1 1性质 2 2 2&#xff1a;互换 n n n阶行列式的任意两行&#xff08;列&#xff09…

机器学习算法那些事 | 60个“特征工程”计算函数(Python代码)

本文来源公众号“机器学习算法那些事”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;60个“特征工程”计算函数&#xff08;Python代码&#xff09; 近期一些朋友询问我关于如何做特征工程的问题&#xff0c;有没有什么适合初学…

【无标题】进程池/Linux

#include <iostream> #include <vector> #include <unistd.h> #include <cassert> #include <sys/types.h> #include <string> #include <sys/wait.h> // using namespace std; #include "Tash.hpp" class channel//封装文…

三分钟快速上手SpringSecurity框架

导入依赖框架 web 框架(spring-boot-starter-web) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> springSecurity 框架(spring-boot-starter-security) <de…

递归-常规问题详解

目录 前言 递归经典题目 子集 77. 组合 46. 全排列 前言 递归在计算机算法中有很重要的地位&#xff0c;它可以解决条件具有重复性的问题。我们在快速排序和归并排序&#xff0c;都是利用了递归去解决问题的。写好一个递归代码不是太容易&#xff0c;很容易造成死循环最终…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要&#xff1a; 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能&#xff0c;旨在监测甲烷和一氧化碳的浓度&#xff0c;并在浓度过高时采取相应措施&#xff0c;以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

人物介绍模板 PSD 源文件免费获取

免费获取 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1sq3e6djMdZt76Sh_uqVxWg 提取码&#xff1a;naun

AniPortrait详细讲解以及完整搭建流程(有问题留言)

AniPortrait是一款真实感人像动画的音频驱动合成的AI程序。 下面是它的github源码: GitHub - Zejun-Yang/AniPortrait: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait AnimationAniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animati…

TiDB学习1:TiDB体系架构概览

目录 1. TiDB体系结构 2. TiDBsever 3. TiKV 4. PD(Placement Driver) 5. TiFlash 1. TiDB体系结构 水平扩容或者缩容金融级高可用实时 HTAP云原生的分布式数据库兼容MySQ 5.7 协议 2. TiDBsever 处理客户端的连接SQL语句的解析和编译关系型数据与 kv 的转化(insert语句)S…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展&#xff0c;传统的博物馆参观方式正在经历一场前所未有的变革&#xff0c;在科技的“加持”下&#xff0c;不少博物馆凭借强大的技术、创意和美学实践&#xff0c;频频“出圈”&#xff0c;线上3D博物馆逐渐崛起&#xff0c;这不仅丰富了人们的文化体验&…

Mirror从入门到入神(二)

文章目录 SpawnSpawnObject NetworkIdentityAwakeInitializeNetworkBehavioursValidateComponents NetworkBehaviourNetworkServerSpawnObjectOnStartServerRebuildObserversRebuildObserversDefaultAddAllReadyServerConnectionsToObservers NetworkIdentityAddObserver Netwo…

C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数

目录 什么是多态性&#xff1f; 概念 分类 向上类型转换 功能的早绑定和晚绑定 绑定 绑定与多态的联系 编译时多态&#xff08;功能的早绑定&#xff09; 运行时多态&#xff08;功能的晚绑定&#xff09; 一般而言 实现功能晚绑定——虚函数 虚函数定义的说明 什么…

springboot jar包下config logback外配置文件不生效

描述 与jar 包同级的config目录下放置配置文件 检查1 确定配置配置文件名称为logback-spring.xml 检查2 确定logback-spring.xml 内容正确 检查3 开发环境为 生产环境&#xff08;外配置环境下&#xff09;

催产素(Oxytocin ) ELISA检测试剂盒

催产素(Oxytocin )是一种神经生理肽&#xff0c;在下丘脑室旁核产生并储存在垂体后部。该分子由9个氨基酸组成&#xff0c;用一个[1-6]二硫键和一个半灵活的羧基酰胺化尾巴连接。催产素是一种曾经被认为仅限于女性平滑肌生殖生理的激素&#xff0c;目前的研究结果已经确定&…

寻求发展+兼顾陪读|企业高管赴美国乔治梅森大学做访问学者

E经理拟去美国访学&#xff0c;想达到3个目的&#xff1a;结合本专业方向&#xff0c;扩展至跨学科研究领域&#xff1b;考察市场&#xff0c;寻求新的发展契机&#xff1b;携孩子出国读书&#xff0c;兼顾陪读&#xff0c;并希望尽早出国。最终我们为其落实的乔治梅森大学访问…