【愚公系列】2023年06月 Java教学课程 143-Spring MVC框架的数据校验

举报
愚公搬代码 发表于 2023/06/30 23:13:00 2023/06/30
【摘要】 一、校验框架1.校验框架入门1.1 表单校验的重要性表单校验对于保证数据的准确性和数据的完整性非常重要。它可以有效地避免输入错误、重复数据、非法数据等问题,从而防止数据的损坏和丢失。同时,表单校验还可以提高用户的输入效率和体验,并降低后续处理的成本和风险。因此,在开发Web应用程序时,一定要重视表单校验的实施。1.2 表单校验分类 • 校验位置:– 客户端校验– 服务端校验• 校验内容与对应...

一、校验框架

1.校验框架入门

1.1 表单校验的重要性

表单校验对于保证数据的准确性和数据的完整性非常重要。它可以有效地避免输入错误、重复数据、非法数据等问题,从而防止数据的损坏和丢失。同时,表单校验还可以提高用户的输入效率和体验,并降低后续处理的成本和风险。因此,在开发Web应用程序时,一定要重视表单校验的实施。

1.2 表单校验分类

• 校验位置:

– 客户端校验

– 服务端校验

• 校验内容与对应方式:

– 格式校验

• 客户端:使用Js技术,利用正则表达式校验

• 服务端:使用校验框架

– 逻辑校验

• 客户端:使用ajax发送要校验的数据,在服务端完成逻辑校验,返回校验结果

• 服务端:接收到完整的请求后,在执行业务操作前,完成逻辑校验

1.3 表单校验规则

• 长度:例如用户名长度,评论字符数量

• 非法字符:例如用户名组成

• 数据格式:例如Email格式、 IP地址格式

• 边界值:例如转账金额上限,年龄上下限

• 重复性:例如用户名是否重复

1.4 表单校验框架

• JSR(Java Specification Requests):Java 规范提案

303:提供bean属性相关校验规则

• JSR规范列表

– 企业应用技术

• Contexts and Dependency Injection for Java (Web Beans 1.0) (JSR 299)

• Dependency Injection for Java 1.0 (JSR 330)@postConstruct, @PreDestroy

• Bean Validation 1.0 (JSR 303)

• Enterprise JavaBeans 3.1 (includes Interceptors 1.1) (JSR 318)

• Java EE Connector Architecture 1.6 (JSR 322)

• Java Persistence 2.0 (JSR 317)

• Common Annotations for the Java Platform 1.1 (JSR 250)

• Java Message Service API 1.1 (JSR 914)

• Java Transaction API (JTA) 1.1 (JSR 907)

• JavaMail 1.4 (JSR 919)

– Web应用技术

• Java Servlet 3.0 (JSR 315)

• JavaServer Faces 2.0 (JSR 314)

• JavaServer Pages 2.2/Expression Language 2.2 (JSR 245)

• Standard Tag Library for JavaServer Pages (JSTL) 1.2 (JSR 52)

• Debugging Support for Other Languages 1.0 (JSR 45)

• 模块化 (JSR 294)

• Swing应用框架 (JSR 296)

• JavaBeans Activation Framework (JAF) 1.1 (JSR 925)

• Streaming API for XML (StAX) 1.0 (JSR 173)

– 管理与安全技术

• Java Authentication Service Provider Interface for Containers (JSR 196)

• Java Authorization Contract for Containers 1.3 (JSR 115)

• Java EE Application Deployment 1.2 (JSR 88)

• J2EE Management 1.1 (JSR 77)

• Java SE中与Java EE有关的规范

• JCache API (JSR 107)

• Java Memory Model (JSR 133)

• Concurrency Utilitie (JSR 166)

• Java API for XML Processing (JAXP) 1.3 (JSR 206)

• Java Database Connectivity 4.0 (JSR 221)

• Java Management Extensions (JMX) 2.0 (JSR 255)

• Java Portlet API (JSR 286)

• Web Service技术

– Java Date与Time API (JSR 310)

– Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311)

– Implementing Enterprise Web Services 1.3 (JSR 109)

– Java API for XML-Based Web Services (JAX-WS) 2.2 (JSR 224)

– Java Architecture for XML Binding (JAXB) 2.2 (JSR 222)

– Web Services Metadata for the Java Platform (JSR 181)

– Java API for XML-Based RPC (JAX-RPC) 1.1 (JSR 101)

– Java APIs for XML Messaging 1.3 (JSR 67)

– Java API for XML Registries (JAXR) 1.0 (JSR 93)

• JCP(Java Community Process):Java社区

• Hibernate框架中包含一套独立的校验框架hibernate-validator

导入坐标

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>

注意:
tomcat7 :搭配hibernate-validator版本5...Final
tomcat8.5↑ :搭配hibernate-validator版本6...Final


2.快速使用

1. 开启校验

• 名称:@Valid 、 @Validated

• 类型:形参注解

• 位置:处理器类中的实体类类型的方法形参前方

• 作用:设定对当前实体类类型参数进行校验

• 范例:

@RequestMapping(value = "/addemployee")
public String addEmployee(@Valid Employee employee) {
System.out.println(employee);
}

2.设置校验规则

• 名称:@NotNull

• 类型:属性注解 等

• 位置:实体类属性上方

• 作用:设定当前属性校验规则

• 范例:
每个校验规则所携带的参数不同,根据校验规则进行相应的调整
具体的校验规则查看对应的校验框架进行获取

public class Employee{
@NotNull(message = "姓名不能为空")
private String name;//员工姓名
}

3.获取错误信息

@RequestMapping(value = "/addemployee")
public String addEmployee(@Valid Employee employee, Errors errors, Model model){
System.out.println(employee);
if(errors.hasErrors()){
for(FieldError error : errors.getFieldErrors()){
model.addAttribute(error.getField(),error.getDefaultMessage());
}
return "addemployee.jsp";
}
return "success.jsp";
}

通过形参Errors获取校验结果数据,通过Model接口将数据封装后传递到页面显示

<form action="/addemployee" method="post">
员工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>
员工年龄:<input type="text" name="age"><span style="color:red">${age}</span><br/>
<input type="submit" value="提交">
</form>

通过形参Errors获取校验结果数据,通过Model接口将数据封装后传递到页面显示
页面获取后台封装的校验结果信息

3.多规则校验

• 同一个属性可以添加多个校验器

@NotNull(message = "请输入您的年龄")
@Max(value = 60,message = "年龄最大值不允许超过60岁")
@Min(value = 18,message = "年龄最小值不允许低于18岁")
private Integer age;//员工年龄

• 3种判定空校验器的区别


4.嵌套校验

• 名称:@Valid

• 类型:属性注解

• 位置:实体类中的引用类型属性上方

• 作用:设定当前应用类型属性中的属性开启校验

• 范例:

public class Employee {
//实体类中的引用类型通过标注@Valid注解,设定开启当前引用类型字段中的属性参与校验
@Valid
private Address address;
}

• 注意:开启嵌套校验后,被校验对象内部需要添加对应的校验规则

5.分组校验

• 同一个模块,根据执行的业务不同,需要校验的属性会有不同

– 新增用户

– 修改用户

• 对不同种类的属性进行分组,在校验时可以指定参与校验的字段所属的组类别

– 定义组(通用)

– 为属性设置所属组,可以设置多个

– 开启组校验

public interface GroupOne {
}

public String addEmployee(@Validated({GroupOne.class}) Employee employee){
}


@NotEmpty(message = "姓名不能为空",groups = {GroupOne.class})
private String name;//员工姓名

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。