13【JSR303校验】
创始人
2024-03-01 20:02:13
0

文章目录

  • 七、JSR303校验
    • 7.1 JSR303 简介
    • 7.2 JSR303提供的约束
    • 7.3 数据校验
    • 7.4 SpringMVC 数据校验


七、JSR303校验

7.1 JSR303 简介

Java Specification Requests:Java 规范提案简称JSR;JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。JSR 303 用于对 Java Bean 中的字段的值进行验证。 Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。

7.2 JSR303提供的约束

Tips:JSR303只是一个规范,我们具体的实现使用Hibernate Validator

  • JSR303 中内置的约束:
约束说明
@Null被标注字段必须为null
@NotNull被标注字段必须不为null
@AssertTrue被标注字段必须为true
@AssertFalse被标注字段必须为false
@Min(value)被标注字段必须是一个数字,并且值要大于等于value
@Max(value)被标注字段必须是一个数字,并且值要小于等于value
@DecimalMin(value)被标注字段必须是一个数字,并且值要大于等于value
@DecimalMax(value)被标注字段必须是一个数字,并且值要小于等于value
@Size(max,min)被标注字段必须是一个字符串,并且长度大于等于min,小于等于max
@Digits(integer,fraction)被标注字段必须是一个数字,并且值必须在可接受的范围内
@Past被标注字段必须是一个已经过去的日期
@Future被标注字段必须是一个将来的日期
@Pattern(value)被标注字段必须复合value中的正则表达式
  • Hibernate Validator新增的约束:
约束说明
@Email被标注字段必须是一个合法的邮箱
@Length被标注字段必须在指定长度内
@NotEmpty被标注字段必须必须非空
@Range被标注的字段必须在指定范围内

7.3 数据校验

引入Hibernate-validator依赖:


org.hibernatehibernate-validator5.1.0.Final
javax.eljavax.el-api3.0.0
org.glassfish.webjavax.el2.2.4
org.projectlomboklombok1.18.22
junitjunit4.13.1test

实体对象:

package com.dfbz.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Range;import javax.validation.constraints.*;
import java.util.Date;/*** @author lscl* @version 1.0* @intro:*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {@NotNull                        // id不能为nullprivate Integer id;             // 用户id@Size(min = 4, max = 8)         // 姓名在4-8位之间private String name;            // 员工姓名@Range(min = 18, max = 28, message = "年龄错了啊")      // 年龄在18-28岁之间private Integer age;            // 年龄@Email                          // 必须是合法emailprivate String email;           // 邮箱@AssertTrue                     // 必须是trueprivate Boolean sex;            // 性别  true:男 false:女@Digits(integer = 3, fraction = 2)           // 整数位必须在3位小数内(包含3位),小数位必须在2位之内(包含2位)private Double salary;          // 薪资@Past                           // 必须是一个已经过去的日期private Date birthday;          // 出生日期
}
  • 测试代码:
package com.dfbz.test;import com.dfbz.entity.Emp;
import org.junit.Test;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Date;
import java.util.Set;/*** @author lscl* @version 1.0* @intro:*/
public class Demo01 {@Testpublic void test1() {Emp emp = new Emp(null,"administrator",38, "admin.com",false, 30.223D,new Date(System.currentTimeMillis()+1000));// 创建校验器工厂ValidatorFactory factory = Validation.buildDefaultValidatorFactory();// 通过工厂创建一个校验器Validator validator = factory.getValidator();// 通过校验器对指定的对象进行校验,获取校验清单Set> violations = validator.validate(emp);if (violations != null && violations.size() > 0) {for (ConstraintViolation violation : violations) {// 获取到每一个校验清单,打印清单值System.out.println("Validation problem : " + violation.getMessage());}}}
}

7.4 SpringMVC 数据校验

  • 准备表单:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title


员工ID:员工姓名:员工年龄:员工邮箱:员工性别:员工薪资:出生日期:
  • Controller:
package com.dfbz.controller;import com.dfbz.entity.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import javax.validation.Valid;
import java.util.List;/*** @author lscl* @version 1.0* @intro:*/
@Controller
@RequestMapping("/demo01")
public class Demo01Controller {/*** @param emp* @param result: 接收校验失败的信息,如果都校验成功则为空,如果没有BindingResult,则校验失败出现400错误* @Valid: 启用JSR303校验*/@RequestMapping("/demo01")public ModelAndView demo01(@Valid Emp emp, BindingResult result) {ModelAndView mv=new ModelAndView("/success.jsp");if (result != null && result.getErrorCount() > 0) {// 说明有校验失败的字段// 获取所有验证不通过的fieldList fieldErrors = result.getFieldErrors();for (FieldError fieldError : fieldErrors) {System.out.println(fieldError.getField() + ": " + fieldError.getDefaultMessage());mv.addObject(fieldError.getField(),fieldError.getDefaultMessage());}mv.setViewName("/error.jsp");}System.out.println(emp);return mv;}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...