SpringMVC(六)数据校验

来源:互联网 发布:仿windows桌面 html5 编辑:程序博客网 时间:2024/05/29 17:22

数据校验是 Web 应用必须处理的内容,Spring MVC 提供了两种方法来对用户的输入数据进行校验,一种是 Spring 自带的 Validation 校验框架,另一种是利用 JRS-303 验证框架进行验证。
接下用我们使用SpringMVC来完成数据校验:
1、新建动态页面:Deposit.jsp
这里写图片描述
页面展示:
这里写图片描述
2、创建javaBean:DepositBean,并添加注解:
SpringMVC是基于正则表达式验证,通过添加注解来规定规则(正则表达式只针对于字符串)

public class Deposit {    /**     * @NotEmpty:不为空     * regexp:正则表达式判定规则     * message:错误提示信息     * @DateTimeFormat:日期格式     */    @NotEmpty(message="账号不能为空")    private String account;    @Pattern(regexp="\\w{4,25}",message="用户名为4到25个字母、数字或下划线")    private String name;    @Pattern(regexp="\\S{6,25}",message="密码为6到25个非空白字符")    private String password;    @Pattern(regexp="\\d{18}",message="身份证为18位数字")    private String id;    @NotEmpty(message="金额不能为空白")    private String amount;    @Pattern(regexp="1|2|3|4|5",message="存款年限为1-5年")    private String duration;    @DateTimeFormat(pattern="yyyy-mm-dd")    private Date date;    @PhoneNo    private String phone;    public String getAccount() {        return account;    }    public void setAccount(String account) {        this.account = account;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getAmount() {        return amount;    }    public void setAmount(String amount) {        this.amount = amount;    }    public String getDuration() {        return duration;    }    public void setDuration(String duration) {        this.duration = duration;    }    public Date getDate() {        return date;    }    public void setDate(Date date) {        this.date = date;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    }

3、创建页面控制器类:DepositController.java

@Controller //指明页面控制器public class DepositController {    /**     * 初步校验     */@RequestMapping("deposit")                  //BindingResult bindingResult  用户获取校验结果public String saveMoney( @Valid Deposit deposit,BindingResult bindingResult) {  //@Valid 用于校验绑定数据,放置数据前面        //判读数据校验结果        if(bindingResult.hasErrors()) {            //获取校验信息            List<FieldError> fieldErrors=bindingResult.getFieldErrors();            System.out.println("校验错误数量:"+bindingResult.getFieldErrorCount());            System.out.println("校验错误信息:");            for(FieldError error:fieldErrors) {                System.out.println("校验错误属性名:"+error.getField());                System.out.println("校验错误提示信息:"+error.getDefaultMessage());            }            return "Deposit";        }        return "DepositSuccess";    }

运行服务器,点击存款,控制台显示:
这里写图片描述

由于我们现在没有输如数据,所以控制台显示的全是错误信息,接下来我们就要把错误信息返回给页面,但是,如果验证成功,我们就在输入框保存输入的值,页面不显示错误信息。

思路:现在我们已经获取到错误属性名和提示信息,通过模型数据把信息传给页面,页面通过EL表达式取出值放在正确的位置即可!

4、二级校验,contronller修改
这里写图片描述
页面修改:
这里写图片描述
解释:value={###} 用于提交验证输入的值
${###}用于显示提示信息


刷新页面显示提示信息
这里写图片描述

输入数据并点击存款按钮

这里写图片描述

如果有数据,并书写正确,提示信息消失!
简单验证完成!


最后,再加一些注解说明
@AssertFalse
验证的数据类型 :Boolean,boolean
说明 :验证注解的元素值是false
@AssertTrue
验证的数据类型 :Boolean,boolean
说明 :验证注解的元素值是true
@NotNull
验证的数据类型 :任意类型
说明 :验证注解的元素值不是null
@Null
验证的数据类型 :任意类型
说明 :验证注解的元素值是null
@Min(value=值)
验证的数据类型 :BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存储的是数字)子类型
说明 :验证注解的元素值大于等于@Min指定的value值

@Max(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值小于等于@Max指定的value值
@DecimalMin(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值大于等于@ DecimalMin指定的value值
@DecimalMax(value=值)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值小于等于@ DecimalMax指定的value值
@Digits(integer=整数位数, fraction=小数位数)
验证的数据类型 :和@Min要求一样
说明 :验证注解的元素值的整数位数和小数位数上限
@Size(min=下限, max=上限)
验证的数据类型 :字符串、Collection、Map、数组等
说明 :验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小
@Past
验证的数据类型 :java.util.Date,java.util.Calendar,Joda Time类库的日期类型
说明 :验证注解的元素值(日期类型)比当前时间早

@Future
验证的数据类型 :与@Past要求一样
说明 :验证注解的元素值(日期类型)比当前时间晚
@NotBlank
验证的数据类型 :CharSequence子类型
说明 :验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格
@Length(min=下限, max=上限)
验证的数据类型 : CharSequence子类型
说明 :验证注解的元素值长度在min和max区间内
@NotEmpty
验证的数据类型 :CharSequence子类型、Collection、Map、数组
说明 :验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@Range(min=最小值, max=最大值)
验证的数据类型 :BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型
说明 :验证注解的元素值在最小值和最大值之间

@Email(regexp=正则表达式,flag=标志的模式)
验证的数据类型 :CharSequence子类型(如String)
说明 :验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式
@Pattern(regexp=正则表达式,flag=标志的模式)
验证的数据类型 :String,任何CharSequence的子类型
说明 :验证注解的元素值与指定的正则表达式匹配
@Valid
验证的数据类型 :任何非原子类型
说明 :指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

注意:此处只列出Hibernate Validator提供的大部分验证约束注解,请参考hibernate validator官方文档了解其他验证约束注解和进行自定义的验证约束注解定义

原创粉丝点击