第五章 Validation

SpringBoot11-Spring Validation讲解01 springboot validation讲解;全局异常处理器;自定义异常 阅读详情

第五章 Validation

5.1节:校验类型和配置方法说明

从Struts2 校验框架在验证的场所上可以分为:客户端校验和服务端校验。

    客户端校验是指,在HTML画面上自动生成JavaScript校验代码,在用户提交到服务器之前在客户端浏览器中进行校验。默认位客户端校验。

    服务端校验是指,在数据提交到服务器上之后,在Action处理之前,对客户但提交的数据进行校验。

 

从Struts2校验框架的配置上可以分为:Java Annotation配置和XML配置文件配置

    Java Annotation配置是指,使用Java Annotation语法,在Java源代码上标记需要校验的内容,和校验的方式。

    XML配置文件配置是指,使用XML配置文件配置需要校验的内容和校验方式。

 

5.2节:Validator与Validation

Validation指校验,Validator指谁来校验。

在Struts2框架中Validator必须在系统中注册,如果没有注册,系统使用默认的注册,这些validator注册文件在xwork的jar文件中,内容如下:

<validators>

    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>

    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>

    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>

    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>

    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>

    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>

    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>

    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>

    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>

    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>

    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>

    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>

</validators>

 

自己需要注册自己的Validator时,可以使用上述相似的内容,这个文件需要放在WEB-INF/classes目录下,文件的名字叫validators.xml。

 

一旦自己定义了validators.xml文件,系统就不会在加载默认的Validators文件,所以在Validators.xml中需要拷贝默认的内容。

 

5.3节:Validation与Intercepter

Validation使用名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使用Validation了。

 

5.4节:使用Java Annotation配置校验

import com.opensymphony.xwork2.validator.annotations包提供了一些必要的Annotation用来配置校验信息。

这些内容包括:

枚举类型

ValidatorType     

Field    校验字段

Simple   校验其他

Annotation(标注)类型

Validation

    用来标记一个类需要被校验

ConversionErrorFieldValidator

    字段转换出错

DateRangeFieldValidator

    日期范围校验

DoubleRangeFieldValidator

    Double类型范围校验

EmailValidator

    Email地址校验

ExpressionValidator

    使用一个OGNL表达式的校验,功能非常强大

FieldExpressionValidator

    针对一个字段的使用OGNL表达式的校验

IntRangeFieldValidator

    Int类型范围校验

RegexFieldValidator

    正则表达式校验

RequiredFieldValidator

    必填字段校验

RequiredStringValidator

    必填String校验,

StringLengthFieldValidator

    字符串长度校验

UrlValidator

    URL校验

Validations

    可以组合上述的各种校验类型以满足更多的需求。

VisitorFieldValidator

    可以将Action中的对象的属性的校验方法定位到已经定义的对象原有的校验方法

 

CustomValidator

ValidationParameter

        两个类一起完成自定义的校验

 

示例:

package com.jpleasure;

 

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;

import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;

import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;

import com.opensymphony.xwork2.validator.annotations.Validation;

import com.opensymphony.xwork2.validator.annotations.ValidatorType;

 

@Validation()

public class RegisterAction extends ActionSupport {

    private String name;

    private String password;

    private String rePassword;

    private String mail;

    private String description;

 

    public String getName() {

        return name;

    }

 

    @RequiredFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "name is required")

    public void setName(String name) {

        this.name = name;

    }

 

    public String getPassword() {

        return password;

    }

 

    @RequiredFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "password is required")

    @StringLengthFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "password must has proper legnth",

            minLength = "5", maxLength = "12")

    public void setPassword(String password) {

        this.password = password;

    }

 

    public String getRePassword() {

        return rePassword;

    }

 

    @RequiredFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true,

            message = "input password again please!")

    @StringLengthFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "password must has proper legnth",

            minLength = "5", maxLength = "12")

    @FieldExpressionValidator(expression = "password eq rePassword",

            message = "two password must match")

    public void setRePassword(String rePassword) {

        this.rePassword = rePassword;

    }

 

    public String getMail() {

        return mail;

    }

 

    @RequiredFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "mail is required")

    public void setMail(String mail) {

        this.mail = mail;

    }

 

    public String getDescription() {

        return description;

    }

 

    @RequiredFieldValidator(type = ValidatorType.FIELD,

            shortCircuit = true, message = "description is required")

    public void setDescription(String description) {

        this.description = description;

    }

 

    public String execute() throws Exception {

 

        return SUCCESS;

    }

}

 

5.5节:使用XML配置Validation

Xml配置文件与Action的关系为:

SomeAction.java – SomeAction-validation.xml

且与SomeAction.class处在相同的目录中。

SimpleAction-validation.xml文件示例:

 

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

  <field name="bar">

      <field-validator type="required">

          <message>You must enter a value for bar.</message>

      </field-validator>

      <field-validator type="int">

          <param name="min">6</param>

          <param name="max">10</param>

          <message>

bar must be between ${min} and ${max}, current value is ${bar}.

</message>

      </field-validator>

  </field>

  <field name="bar2">

      <field-validator type="regex">

          <param name="regex">[0-9],[0-9]</param>

          <message>

The value of bar2 must be in the format "x, y", where x and y are between 0 and 9

</message>

     </field-validator>

  </field>

  <field name="date">

      <field-validator type="date">

          <param name="min">12/22/2002</param>

          <param name="max">12/25/2002</param>

          <message>The date must be between 12-22-2002 and 12-25-2002.</message>

      </field-validator>

  </field>

  <field name="foo">

      <field-validator type="int">

          <param name="min">0</param>

          <param name="max">100</param>

          <message key="foo.range">Could not find foo.range!</message>

      </field-validator>

  </field>

  <validator type="expression">

      <param name="expression">foo lt bar </param>

      <message>Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>

  </validator>

</validators>

 

我们看看上面的配置文件,首先每一个validatior都必须有一个type属性,type属性的值为我们前面定义的validator的name。

Message提供了校验出错的信息,message有一个属性key,通过可以可以找到i18n文件定义的内容,但是key并不是必须的。Message体内部的消息为默认消息,当i18n文件中不存在时表示该消息。消息中可以使用${}来引用被校验的对象例如:${foo},${bar}

 

5.6节:Validator和Field Validator

Field Validator用来校验一个字段,例如:

<field name="email_address">

  <field-validator type="required">

      <message>You cannot leave the email address field empty.</message>

  </field-validator>

  <field-validator type="email">

      <message>The email address you entered is not valid.</message>

  </field-validator>

</field>

Filed validator可以从filed集成字段名字,这样可以将摸个Field的所有的校验局限在一定的范围内。

 

使用Validator可以校验多个字段之间的关系,例如:

<validator type="expression>

         <param name="expression">foo gt bar</param>

         <message>foo must be great than bar.</message>

</validator>

Validator也可以校验一个字段,例如:

<validator type="required">

        <param name="fieldName">bar</param>

        <message>You must enter a value for bar.</message>

</validator>

但是为了将一个字段的所有校验放在一起,我们倾向于尽量使用field validator

 

5.7节:短路(Short-Circuiting)

参看如下例子:

<!DOCTYPE validators PUBLIC

        "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

  <!-- Field Validators for email field -->

  <field name="email">

      <field-validator type="required" short-circuit="true">

          <message>You must enter a value for email.</message>

      </field-validator>

      <field-validator type="email" short-circuit="true">

          <message>Not a valid e-mail.</message>

      </field-validator>

  </field>

  <!-- Field Validators for email2 field -->

  <field name="email2">

     <field-validator type="required">

          <message>You must enter a value for email2.</message>

      </field-validator>

     <field-validator type="email">

          <message>Not a valid e-mail2.</message>

      </field-validator>

  </field>

  <!-- Plain Validator 1 -->

  <validator type="expression">

      <param name="expression">email.equals(email2)</param>

      <message>Email not the same as email2</message>

  </validator>

  <!-- Plain Validator 2 -->

  <validator type="expression" short-circuit="true">

      <param name="expression">email.startsWith('mark')</param>

      <message>Email does not start with mark</message>

  </validator>

</validators>

 

校验的顺序:首先Validator,其次Field Validator,但是在Validator或者Field Validator执行的过程中,顺序按照xml文件中的定义。短路的意思是,一旦一个短路的校验出错,其余后续的校验将不再进行。例如上述的顺序是:

1)Plain Validator 1

2)Plain Validator 2

3)Field Validators for email field

4)Field Validators for email2 field

 

由于Validator 2是短路的,一旦Validator 2校验出错,则email和email2都不会进入校验过程。

 

 

5.8节:validate方法

ActionSupport实现了Validatable接口,这个接口中定义了一个validate方法,通过重写validate方法可以完成更详细的校验,例如:

public void validate() {

  User user = getUser();

  if (StringUtils.isBlank(user.getName())) {

    addActionError(getText("user.name.empty"));

  }

  if (StringUtils.isBlank(user.getAddress())) {

    addActionError(getText("user.address.empty"));

  }

}

ActionSupport同时也实现了ValidationAware接口,该接口提供了addActionError等输出错误消息的方法。

 
【技术实战】SeaTunnel 实现 HTTP 到 Doris 数据同步的配置优化与问题解决 本文分享了使用SeaTunnel实现HTTP数据源到Doris数仓同步的实战经验。详细解析了从环境搭建、核心配置到生产部署的全流程,重点针对数据类型映射、分页拉取、依赖冲突等典型问题提供了解决方案,并给出了连接参数调优、错误处理等进阶优化技巧,帮助开发者构建稳定高效的数据同步管道。 阅读详情

相关推荐

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

validation字段校验

这样直接抛异常不太友好,可以通过@RestControllerAdvice处理全局异常,并将异常返回给前端。此时若是请求参数的姓名为空或者手机号格式不正确,则会抛出异常。2.实现ConstraintValidator接口。3、controller层添加@valid注解。JsonResult.java为返回的json。5、自定义注解(自定义校验规则)

weixin_50117915的博客 1692

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3315

spring validation校验 List<String>

方式一:spring maven 依赖: <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>3.0.0</version> </dependency> <dependency>

li_tiantian的博客 7879

手把手教你用ZEMAX复现贝塞尔光束:从Thorlabs锥透镜到Edmund透镜的完整光路搭建

本文详细介绍了如何在ZEMAX光学设计软件中复现贝塞尔光束,从Thorlabs锥透镜到Edmund透镜的完整光路搭建过程。通过逐步指导,帮助研究人员和工程师掌握光学设计技巧,实现无衍射特性的贝塞尔光束生成,适用于激光加工和生物成像等领域。

weixin_33737774的博客 178

大厂案例:快手AI人才管理系统的架构设计与效果

凌晨两点刷简历的HR、说不清“团队离职率高”原因的业务leader、不知道“该学什么”的员工——这些人力资源场景中的“痛点”,曾是快手高速增长期的真实写照。当员工规模从几千扩张到几万,传统HR系统的“经验驱动”模式彻底失效。2021年,快手启动AI人才管理系统建设,用“数据+算法”重构招聘、培养、绩效、留存全流程。本文将拆解这套系统的架构设计逻辑核心技术实现,以及真实业务效果AI如何让HR从“事务执行者”变成“战略伙伴”?

大模型应用工坊 1710

SpringBoot Validation优雅的参数校验

前言:大多数项目中都需要后台对传过来的对象进行校验,所以经常需要写一些字段校验的代码,比如特殊字段非空、字段长度限制和邮箱格式验证等等。之前我们可能都是使用if…else…,写这些与业务逻辑关系不大的代码,不仅验证代码繁琐而且重复劳动,今天我们了解一下Hibernate-Validator的@validated注解。 一、Hibernate-Validator简介 1.1、为什么需要参数校验 在日常的接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,例如登录的时候需要校验用户名密

何哥的博客 1万+

verilog CORDIC对数运算

verilog CORDIC对数运算

m0_64355812的博客 1735

使用Spring Validation校验参数

全局异常处理类可以添加各种需要处理的异常,比如添加一个对Exception.class的异常处理,当所有ExceptionHandler都无法处理时,由其记录异常信息,并返回友好提示。如果 UserVO 类中增加一个 OrderVO 类的属性,而 OrderVO 中的属性也需要校验,就用到递归校验了,只要在相应属性上增加@Valid注解即可实现(对于集合同样适用)待校验参数多了之后我们希望一次返回所有校验失败信息,方便接口调用方进行调整,这就需要统一返回格式,常见的就是封装一个结果类。

qq_52695936的博客 345

什么是三极管推挽电路

当没有信号输入时,电源通过PNP三极管EB间的二极管,然后通过NPN三极管BE间而二极管到地,这时这两个三极管都是导通的,三极管很容易由于电流过大而损坏。当输入信号为VCC时,上面的三极管导通,下面的三极管截止,输出信号为VCC-0.7V,这个0.7V就是上面NPN三极管BE间的导通压降。比如上面的三极管导通,那么输出电压就是输入电压减去0.7V,所以下面的PNP三极管由于基极电压大于发射极电压,是不会导通的。这是一个三极管推挽电路,上面是一个NPN的三极管,下面是一个PNP的三极管。

谢谢关注“小鱼教你模数电”,各平台同号 3369

miRNA测序数据生信分析——第一讲,总结概述

这里的miRNA测序指转录水平的测序。这里每一个数据库都可以在线访问,但是如果要本地使用,都需要进行数据库文件下载,整理。

weixin_44616693的博客 4951

SpringBoot 使用validation进行参数校验

导入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> entity类上添加校验注解: @Data public class User { @Min(value = 3) priv

往南的博客 749

SOME/IP协议详解「2.1.2·Payload数据类型序列化」

SOME/IP协议详解「2.1.2·Payload数据类型序列化」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.1.2·Payload数据类型序列化」1 大小端问题2 数据对齐填充问题3 都有哪些数据类型 之前简单的概括了一下序列化/反序列化,就是降维打击,从这一章开始到2.1所有章节结束,都在讲解这个降维打击的详细规则与原理 1 大小端问题 首先什么是大小端: 大端:高字节存放到内存的低地址 小端:高字节存放到内存的高地址 假如有一个数据是0x12345678

雪云飞星的博客 4625

JavaLin第五章:JavaLin的Validation验证

本篇博客讲解了javalin框架的验证类处理和以及验证错误的处理,希望能给大家讲的比较明白。

weixin_51322336的博客 671

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

第五章 Struts2------- Validation

5.1节:校验类型和配置方法说明从Struts2 校验框架在验证的场所上可以分为:客户端校验和服务端校验。    客户端校验是指,在HTML画面上自动生成JavaScript校验代码,在用户提交到服务器之前在客户端浏览器中进行校验。默认位客户端校验。    服务端校验是指,在数据提交到服务器上之后,在Action处理之前,对客户但提交的数据进行校验。 从Struts2校验框

懒散狂徒的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

第五章、Bean Validation元数据查询

Bean Validation 规范提供了一种查询约束存储库的方法。 该API有望用于工具支持以及与其他框架、库和JSR的集成。Bean Validation规范旨在为对象约束提供验证引擎和元数据存储库,需要约束定义,验证和元数据的框架(EE或SE)将能够依赖Bean Validation规范提供这些服务,从而避免了从应用程序和基础结构的角度进行任何不必要的重复工作 文章目录5.1、 Validator5.2、ElementDescriptor ( 元素描述接口)5.3、BeanDescriptor5..

往前的娘娘 261

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

javax.validation 添加了注释但没有进行验证,返回的 errors 数量为0的解决办法

今天在学习 Spring 实战 第四版的第五章过程中,使用到了 spring MVC 对 Java 校验 API 的支持,添加了 javax.validation 中的注释来实现对 Spitter 类属性的输入验证。 因为书中并没有详细的代码,加上之前没有进行任何相关的学习,因此只能一步步靠自己摸索出来。 首先贴上 Spitter 类: package org.fisherman.spit...

xie_sining的博客 2191

【spring】参数校验Validation

在实际开发中,我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递,传来的参数长度不符合要求等,这种时候如果放任不管,继续执行后续业务逻辑,很有可能就会出现意想不到的bug。有人可能会说,这不是前端的问题吗,让前端校验去。话是这么说,但我们也不能前端校验百分百不会出现问题。并且有些请求可能也不是正规通过客户端发来的,可能是黑客恶意攻击,又或是通过Postman等发来的,这些请求就不一定会“合法”了。因此,对客户端传来的每个请求都进行必要的参数校验是十分重要的。

acm_pn的博客 5077

使用spring validation完成数据后端校验

前言数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已。我在之前保险产品研发过程中,系统对数据校验要求比较严格且追求可变性及效率,

徐靖峰的专栏 12万+

validation

如何来确定最优的模型? 使用Ein(w):以最小的Ein(w)作为标准,将导致模型复杂度过高,往往泛化能力不足! 使用Etest(w):但是无法收集测试数据! 折中的方案就是从用于演算法的数据割裂一部分出来,以pick 最优的模型! 如果没有validation data,我们将所有收集的数据喂到M个演算法(model)中根据error function 学到最优参数,同样使用这组数据计算出...

m0_37937932的博客 4470

Spring Validation 全面解析

概念**说明Java EE 标准规范,定义校验注解和接口。Bean Validation 的参考实现,Spring Boot 默认使用。对 Bean Validation 的封装,提供@Valid和@Validated注解。Spring Validation 的底层依赖 Hibernate Validator 实现校验逻辑,开发者通过 JSR 380 注解声明规则,最终由 Spring 集成到 MVC 异常处理流程中。理解这一分层架构,是掌握 Spring Validation 的关键。

leo-way的博客 1732
上一篇: 使用Struts2开发Java Web应用程序(目录)
下一篇: 软件存在的价值
struts2
博客等级 码龄19年 885粉丝 103原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值