Spring MVC如何进行数据校验呢?

2023-11-15

转自:

Spring MVC如何进行数据校验呢?

在web开发中,我们需要保证用户输入的合法性,那么SpringMVC中如何保证web 应用的合法性呢?
下文将一一道来,如下所示:
 
下文只讲述SpringMVC后端的验证方法,前端验证,由用户自身采用javascript进行验证

Spring MVC 有以下两种方法可以验证输入:
    运用Spring 自带的验证框架
    运用JSR 303实现

 
一、运用JSR 303实现服务器端的数据验证 
     JSR303 是Java为Bean数据合法性校验所提供的标准框架
     JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的验证接口对 Bean 进行验证
      用户可通过 https://jcp.org/en/jsr/detail?id=303 查看详细内容并下载 JSR 303 Bean Validation。

JSR 303 不需要编写验证器,它定义了一套可标注在成员变量、属性方法上的校验注解,如下表所示 

 

名称     说明
@Null     被标注的元素必须为 null
@NotNull     被标注的元素必须不为 null
@AssertTrue     被标注的元素必须为 true
@AssertFalse     被标注的元素必须为 false
@Min(value)     被标注的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)     被标注的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMax(value)     被标注的元素必须是一个数字,其值必须大于等于指定的最大值
@DecimalMin(value)     被标注的元素必须是一个数字,其值必须小于等于指定的最小值
@size     被标注的元素的大小必须在指定的范围内
@Digits(integer,fraction)     被标注的元素必须是一个数字,其值必须在可接受的范围内;integer 指定整数精度,fraction 指定小数精度
@Past     被标注的元素必须是一个过去的日期
@Future     被标注的元素必须是一个将来的日期
@Pattern(value)     被标注的元素必须符合指定的正则表达式Spring MVC 支持 JSR 303 标准的校验框架,Spring 的 DataBinder 在进行数据绑定时, 同时调用校验框架完成数据校验工作



二、由于Spring未提供JSR 303实现,Hibernate Validator 实现了 JSR 303,
在项目中加入来自 Hibernate Validator 库的 jar 文件,下载地址为 http://hibernate.org/validator/。本节使用版本为 hibernate-validator-5.1.0.Final-dist.zip,复制其中的 3 个 jar 文件即可,Spring 将会自动加载并装配。
hibernate-validator-5.1.0.Final.jar
jboss-logging-3.1.0.CR2.jar
validation-api-1.0.0.GA.jar
 
1. 导入依赖
pom.xml 文件中添加以下代码。
<!-- 数据校验 -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.1.0.CR2</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.0.Final</version>
</dependency>
2. 创建实体类
创建 User 实体类,代码如下。
package com.java265.entity;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
public class User {
    @NotNull(message = "用户id不能为空")
    private Integer id;
    @NotNull
    @Length(min = 2, max = 8, message = "用户名不能少于2位大于8位")
    private String name;
    @Email(regexp = "[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]", message = "邮箱格式不正确")
    private String email;
    /** 省略setter和getter方法*/
}
3. 创建JSP页面
创建 addUser.jsp,代码如下。
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加用户</title>
</head>
<body>
    <form action="${pageContext.request.contextPath}/validate" method="post">
        用户id:<input type="text" name="id" />
        <br>
        用户名:<input type="text" name="name" />
        <br>
        邮箱:<input type="text" name="email" />
        <br>
        <input type="submit" value="提交" />
    </form>
</body>
</html>
4. 创建控制器
创建 UserController 控制器类,代码如下。
package com.java265.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.java265.entity.User;
@Controller
public class UserController {
    @RequestMapping("/validate")
    public String validate(@Valid User user, BindingResult result) {
        // 如果有异常信息
        if (result.hasErrors()) {
            // 获取异常信息对象
            List<ObjectError> errors = result.getAllErrors();
            // 将异常信息输出
            for (ObjectError error : errors) {
                System.out.println(error.getDefaultMessage());
            }
        }
        return "index";
    }
    @RequestMapping(value = "/addUser")
    public String add() {
        return "addUser";
    }
}
5. 运行测试
访问地址:http://localhost:8080/com.java265/addUser,运行结果如下。


Eclipse 控制台会打印出以下信息:
邮箱格式不正确
用户id不能为空
用户名不能少于2位大于8位

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC如何进行数据校验呢? 的相关文章

  • SimpleServletHandlerAdapter类简介说明

    转自 SimpleServletHandlerAdapter类简介说明 下文笔者讲述SimpleServletHandlerAdapter类简介说明 如下所示 SimpleServletHandlerAdapter简介 SimpleServ
  • Spring MVC类型转换的相关说明

    转自 Spring MVC类型转换的相关说明 下文讲采用示例的方式 讲述相关类型说明 如下所示 insert jsp页面的代码如下
  • Java面试题全集(下)

    这部分主要是开源Java EE框架方面的内容 包括hibernate MyBatis spring Spring MVC等 由于Struts 2已经是明日黄花 在这里就不讨论Struts 2的面试题 如果需要了解相关内容 可以参考我的另一篇
  • Spring Aop自定义注解用在Controller层

    前提项目用的框架是SpringMVC 切面类 Aspect Component 把这个注掉是为了不让Spring中扫描 应该让SpringMVC扫描 public class SysLogAop Pointcut annotation co
  • 【j2ee系列】springmvc中使用quartz,项目启动就执行某些任务

    quartz有几种执行任务的方式 至于几种我也不知道 至少有两种吧 一种是org springframework scheduling quartz CronTriggerBean方式 配置指定的时间执行一次任务 如
  • Spring、SpringMVC、SpringBoot三者的区别

    目录 Spring是什么 SpringMVC是什么 SpringBoot是什么 Spring SpringMVC SpringBoot三者之间的关系 Spring是什么 Spring是一个开源的应用程序框架 它提供了一种简易的开发方式 通过
  • Spring+SpringMVC+mybatis+Quartz整合

    Quartz与SpringMVC的整合 简介 Quartz是一个完全由java编写的开源作业调度框架 为在Java应用程序中进行作业调度提供了简单却强大的机制 Quartz允许开发人员根据时间间隔来调度作业 它实现了作业和触发器的多对多的关
  • Spring MVC具有哪些优点及缺点呢?

    转自 Spring MVC具有哪些优点及缺点呢 下文笔者将讲述SpringMVC的优点及缺点 如下所示 Spring MVC是当前最优秀的MVC框架 自从Spring 2 5版本发布后 由于支持注解配置 易用性有了大幅度的提高 Spring
  • Spring boot项目设定返回数据为JSON固定格式

    1 配置处理json的配置类 package com test config import com alibaba fastjson support spring FastJsonHttpMessageConverter import or
  • Spring MVC+Jquery Ajax 前后台传递Json对象

    关于Spring MVC3 X 接收和返回Json 最近开发项目时遇到此问题 解决后 特做下备忘 1 javabean 1 Content java public class Content implements Serializable
  • AbstractUrlHandlerMapping类功能简介说明

    转自 AbstractUrlHandlerMapping类功能简介说明 下文笔者将讲述AbstractUrlHandlerMapping类的相关简介说明 如下所示 AbstractUrlHandlerMapping是AbstractHand
  • Spring MVC教程第一篇

    转自 Spring MVC教程第一篇 Spring MVC是Java平台下的一个框架 Spring MVC是一个开源框架 它用于开发Java Web应用程序 Spring框架由Rod Johnson编写 在2003年6月采用Apache 2
  • Spring MVC参数的传递与接收

    SpringMVC主要做的就两方面的操作 在Controller接收从jsp传递过来的数据 把Controller的数据传递到jsp页面 将Controller里边的数据传到jsp 其返回值有三种类型 ModelAndView void S
  • springmvc有哪几种请求参数的方式呢?

    转自 springmvc有哪几种请求参数的方式呢 传送参数至后台 是每个系统都必须面对的事实 因为系统就是一个实现人机交互的工具 那么Spring MVC中如何在后台获取参数呢 下文将一一道来 如下所示 方式一 在Controller的形参
  • Spring MVC 使用JSR303校验表单

    导入JSR303相关JAR包 Spring MVC 使用JSR303校验表单 创建registerForm jsp
  • Spring MVC中如何使用forward进行请求转发呢?

    转自 Spring MVC中如何使用forward进行请求转发呢 下文讲述Spring MVC进行请求转发的2种方式简介说明 如下所示 Spring MVC种forward请求是一种服务器端请求方式 它无需通过客户端 可以提高系统的转发速度
  • Spring MVC使用注解实现账户注册与登陆

    涉及到的注解 Controller 控制器类 RequestMapping 映射路径 RequestParam 用于将指定的请求参数赋值给方法中的形参 定义域对象 User1 用来接受并封装前台传递的数据 package com wen d
  • SpringMVC的数据响应(页面跳转、回写数据)

    SpringMVC的数据响应 一 SpringMVC的数据响应 01 SpringMVC的数据响应 数据响应方式 02 SpringMVC的数据响应 页面跳转 返回字符串形式 03 SpringMVC的数据响应 页面跳转 返回ModelAn
  • dubbo zookeeper spring mvc简单整合的工程例子demo

    该demo只是简单的集成 包括了5个工程 都是maven结构的 如下图所示 服务端 dubbo demo server api 服务接口定义工程 dubbo demo server biz 服务接口实现工程 web dubbo server
  • 重启大法好

    在做springMVC服务器的时候 出现解析不了URL 即dispatch映射不了action的时候 1 检查springname servlet xml 2 检查web xml 3 检查注解是否错误 4 重启eclipse 5 重启电脑

随机推荐

  • 【TensorFlow】卷积tf.nn.conv2d()函数使用解析 ( 附代码详解注释 )

    最近在研究学习TensorFlow 在做识别手写数字的demo时 遇到了tf nn conv2d这个方法 查阅了官网的API 发现讲得比较简略 还是没理解 google了一下 参考了网上一些朋友写得博客 结合自己的理解 差不多整明白了 方法
  • PyQt槽函数添加参数

    PyQt槽函数添加参数 这篇文章的前提是你得知道槽函数是啥 在这边我就不解释了 如果你是自定义信号 并且使用emit 方法进行发送的 那在emit里面就可以传入参数 这个懂得都懂 不懂得可以看一下这个大佬的文章link 他写的非常详细 如果
  • ES6-Map、Set与Arrary的转换

    Map与Array的转换 这个数组要是二维数组
  • python学习第六站:列表

    序列 一 1 序列 sequence 1 1 基本概念 1 2 序列分类 2 列表 list 2 1 列表的使用 2 2 列表的切片 2 3 修改列表 2 4 修改列表的方法 2 5 遍历列表 2 5 1 range 函数 3 通用操作 3
  • 人工智能如何助力建筑设计自动化?

    ChatGPT和DALL E等工具使用大规模机器学习 ML 模型 并访问大量有标记和有意义的数据 以对文本和图像中的查询提供有见解的响应 但是 一些行业对训练ML模型的数据集的访问有限 这使得使用生成式AI来解决现实世界问题的好处很难获得
  • 私有镜像仓库 Harbor 的搭建参考

    浅尝辄止 只讲基本的安装和使用 Harbor 官网 https goharbor io 为什么要使用 harbor 作为搭建私有镜像仓库的系统 权限控制强 操作可审计 镜像漏洞分析 镜像验真 镜像复制 CNCF 官方毕业项目之一 等等 1
  • 计算机视觉、机器视觉、数字图像处理、机器学习/深度学习+图像处理 四者的关系

    一 机器能进行视觉感知的进化发展 就算机器能识别各种物体用处大吗 小猫有眼睛 认识吃的就吃 看到危险就躲 还能抓苍蝇 那具有运动能力的机器没有视觉怎么做出决策和会执行 机器拿到数字图像如何提取感知信息 像小猫认识吃 判别危险 感知苍蝇的位置
  • Apache CXF webservice 注入Spring Bean

    webservice 接口定义 package com wlsq kso webservice import javax jws WebMethod import javax jws WebParam import javax jws We
  • 百度人脸识别使用总结(环境+测试+人脸库管理)

    内容有点多 大概分三天写完 提前开坑省的拖延症犯了orz 好吧拖延症果然犯了 然后第四天才继续开始更 先总结一下 全程花了三四天的白天的时间 本身其实是不复杂的 但是中间会有很多坑 专门写这个教程出来是想给同样想尝试使用这个的同学们一点帮助
  • Web攻击手段之XSS攻击,CRSF, SQL注入攻击

    Web攻击手段之XSS攻击 CRSF SQL注入攻击 1 XSS攻击 XSS攻击的全称是跨站脚本攻击 指的是攻击者在网页中嵌入恶意脚本程序 当用户打开该网页时 脚本程序便开始在客户端的浏览器上执行 以盗取客户端cookie 用户名密码 下载
  • 三次握手、四次挥手的理解

    下面是个人对三次握手和四次挥手的理解 1 三次握手 第一次握手 客户端向服务器发起连接请求 此时要确认客户端能不能发 第二次握手 服务器收到客户端的连接请求后 会给一个应答 以及请求连接的数据包 意味着服务器收到了客户端连接的请求 以此证明
  • 企业级网络突然变得很卡解决办法

    企业网络现状 公司有两个路由 都是10M的电信 我们台式电脑都是用的外置网卡连接无线上网的 平均一个路由有50台电脑使用 可是网络一直不稳定 没有被别人蹭网 防火墙也设置了相应的ACL策略 也锁定了MAC 平时使用网络是很稳定的但是问题来了
  • games101 Lecture 9 线性插值(对三角形内部的线性插值)

    重心坐标 当 alpha beta gamma
  • SonarQube白盒静态代码专家解决方案

    中国区官网 http www safetesting cn 西安青穗 http www safetesting cn 是瑞士SonarSource公司正式授权的中国渠道商和技术服务提供商 技术服务团队有多年行业经验的业界专家 咨询顾问组成
  • bi工程师面试题_【BI 大数据分析】职业规划 之横纵拓展

    这章有以下内容展示 技术需求与更新方面 挖深后需要了解的方面有那些 关于Linux系统 它在BI大数据分析框架是用来干什么 扮演什么角色 关于SQL编写 Q1 它在BI大数据分析框架是用来干什么 扮演什么角色 Q2 什么时候要用到SQL Q
  • YOLOv5-6.x源码分析(四)---- 模型搭建之yolo.py

    文章目录 前引 YOLOv5 6 x源码分析 四 yolo py 1 导入需要的包 2 parse model 2 1 获取对应参数 2 2 搭建网络的准备 2 3 更新args 计算c2 2 4 使用当前层的参数搭建当前层 2 5 打印并
  • Java在pdf文件中加入文字或图片

    pom 导入itextpdf 依赖
  • Python 印章代码(附有解析)

    1 题目 2 代码 共有n种图案的印章 每种图案的出现概率相同 小A买了m张印章 求小A集齐n种印章的概率 n m map int input split dp 0 for i in range n 1 for j in range m 1
  • 如何用计算机测试交易系统,一种自动售票机交易功能的测试系统和方法与流程...

    本发明涉及一种自动售票机检测领域 尤其是涉及一种自动售票机交易功能的测试系统和方法 背景技术 轨道交通的自动售票机 TVM 在接入线网投用之前 必须进行功能测试 以确保功能完备 交易完整 正常使用 目前的测试方法是通过人工购买车票的方法来测
  • Spring MVC如何进行数据校验呢?

    转自 Spring MVC如何进行数据校验呢 在web开发中 我们需要保证用户输入的合法性 那么SpringMVC中如何保证web 应用的合法性呢 下文将一一道来 如下所示 下文只讲述SpringMVC后端的验证方法 前端验证 由用户自身采