当前位置: 首页 > news >正文

Spring MVC 数据校验

数据校验是每个项⽬中必不可少的模块,Spring MVC 提供了两种数据校验的组件:
1.基于 Validator 接⼝进⾏校验
2.使⽤ Annotation JSR-303 标准校验

使⽤基于 Validator 接⼝进⾏校验会复杂⼀些,具体的数据校验的规则需要开发者⼿动设置。⽽使⽤ Annotation JSR-303 标准会相对简单⼀些,开发者不需要编写校验规则,直接通过注解的形式给每⼀条 数据添加验证规则,具体操作是直接在实体类的属性上添加对应的校验注解即可。

一、基于 Validator 接⼝

1.1 创建实体类

package com.southwind.entity;import lombok.Data;@Data
public class Student {private String name;private String password;
}

1.2 ⾃定义数据校验器 StudentValidation,实现 Validator 接⼝,重写接⼝的抽象⽅法,加⼊校验规则。

package com.southwind.validation;import com.southwind.entity.Student;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;public class StudentValidation implements Validator {@Overridepublic boolean supports(Class<?> aClass) {return Student.class.equals(aClass);}@Overridepublic void validate(Object o, Errors errors) {ValidationUtils.rejectIfEmpty(errors, "name", null, "姓名不能为空");ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");}
}

1.3 控制层业务⽅法

package com.southwind.controller;import com.southwind.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/validate")
public class ValidateHandler {/*** 给JSP表单绑定模型对象* @param model* @return*/@GetMapping("/login")public String login(Model model) {model.addAttribute(new Student());return "login";}/*** 数据校验* @param student* @param bindingResult* @return*/@PostMapping("/login")public String login(@Validated Student student, BindingResult bindingResult) {if (bindingResult.hasErrors()) {return "login";}return "success";}
}

1.4 springmvc.xml 配置 validator

<mvc:annotation-driven validator="studentValidator"><!-- 启用基于注解的 MVC 功能,并指定验证器 -->
</mvc:annotation-driven>
<bean id="studentValidator" class="com.southwind.validation.StudentValidation"><!-- 定义一个名为 studentValidator 的验证器 Bean -->
</bean>

1.5 JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html><head><title>Title</title></head><body><h1>学⽣登陆</h1><form:form modelAttribute="student" action="/validate/login" method="post">学⽣姓名: <form:input path="name" /> <form:errors path="name" /><br/>学⽣密码: <form:input path="password" /> <form:errors path="password" /><br/><input type="submit" value="提交"/></form:form></body>
</html>

二、Annotation JSR-303 标准

Hibernater Validator,通过注解完成校验规则的绑定。
@Null 只能为 null
@NotNull 不能为 null
@Size 设置数据⻓度
@NotEmpty 不能为空
String str = null;
String str = "";

2.1 pom.xml

<!-- JSR-303 -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.3.6.Final</version>
</dependency>
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version>
</dependency>
<dependency><groupId>org.jboss.logging</groupId><artifactId>jboss-logging</artifactId><version>3.4.1.Final</version>
</dependency>
<!-- JDK9以上 -->
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>

2.2 创建实体类,通过注解的⽅式给属性指定校验规则。

package com.southwind.entity;import lombok.Data;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;@Data
public class Account {@NotEmpty(message = "⽤户名不能为空")private String username;@Size(min = 6, max = 20, message = "密码⻓度为6 - 20位")private String password;@Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\\\.[a-zA-Z0-9-]+)*\\\\.[a-zA-Z0-9]{2,6}$", message = "请输⼊正确的邮箱")private String email;@Pattern(regexp = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\\\d{8}$", message = "请输⼊正确的电话格式")private String phone;
}

2.3 业务⽅法

@GetMapping("/register")
public String register(Model model) {model.addAttribute(new Account());return "register";
}@PostMapping("/register")
public String register(@Valid Account account, BindingResult bindingResult) {if (bindingResult.hasErrors()) {return "register";}return "success";
}

2.4 springmvc.xml

<mvc:annotation-driven></mvc:annotation-driven>

2.5 register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html><head><title>Title</title></head><body><h1>⽤户注册</h1><form:form modelAttribute="account" action="/validate/register" method="post">⽤户名:<form:input path="username"></form:input><form:errors path="username"></form:errors><br/>密码:<form:input path="password"></form:input><form:errors path="password"></form:errors><br/>邮箱:<form:input path="email"></form:input><form:errors path="email"></form:errors><br/>电话:<form:input path="phone"></form:input><form:errors path="phone"></form:errors><br/><input type="submit" value="提交"/></form:form></body>
</html>
http://www.dtcms.com/a/546105.html

相关文章:

  • Rust 中所有权与零成本抽象的深度关联:原理与实践
  • 被通知公司网站域名到期搭建企业资料网站
  • 仓颉语言宏系统的设计与应用:从元编程到领域特定语言
  • 【GUI】本地电脑弹出远程服务器的软件GUI界面
  • 仓颉技术:Union类型的定义与应用
  • 闲置电脑做网站服务器重庆互联网公司排行榜
  • 连续值和缺失值详解
  • 仓颉FFI外部函数接口:跨语言互操作的工程实践
  • 串口、RS-232与RS-485应用全解析
  • 推广公司网站premium WordPress
  • 成都建站seo奉贤集团公司网站建设
  • 网站的空间和域名iis内网站设置允许脚本执行
  • 商旅平台定义、选型逻辑与2025主流商旅平台汇总
  • 0144. 二叉树的前序遍历
  • 做网站的钱叫什么科目建设工程自学网站
  • 自动驾驶汽车与利益相关者互动的功能安全与网络安全分析方法
  • 如何将本地项目上传至github
  • 整合STPA、ISO 26262与SOTIF的自动驾驶安全需求推导与验证
  • 广东网站备案系统北京网页设计机构
  • Linux系统启动光盘/U盘制作
  • 外贸网站怎样做推广商城微信网站怎么做
  • Adobe SAP S/4HANA 升级实践:企业规模化转型关键要素
  • 可信赖的深圳网站建设微信开店小程序怎么弄
  • 鄂尔多斯网站制作 建设wordpress主题游戏cms
  • Cargo.toml 配置文件详解:掌控 Rust 项目的核心枢纽
  • css boder-image 属性使用
  • netty异步日志架构
  • 图像分割介绍
  • 建个网站能赚钱吗大型网站建设基本流程
  • 肇庆市专注网站建设平台wordpress 数据库导入数据库文件