Hibernate 验证框架的使用

本文探讨了数据校验的重要性,详细介绍了前端JS验证和后端HibernateValidator的使用方法,解释了为何需同时进行前后端校验,以及各自的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据的校验

(1) 前台的数据校验

​ 主要的作用就是为了提交数据的有效性的检查

(2)后端的数据校验

​ 主要功能就是为了防止 提交脏数据

​ 脏数据可以来源于第三方

2、前端验证:JS验证
 <script>
        function addClasses (){ 
            var className=$("[name=className]").val();
            if (className==""){
                $("[name=className]").parent().prop("style","border: 1px solid red")
                return;
            }else {
                $("[name=className]").parent().prop("style","")
            }
        }
     
     ......
  </script>
3、后端验证:Hibernate Validator
(1)导入依赖
    <!--导入Validator的相关包 (后端验证)-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.4.1.Final</version>
    </dependency>
(2)spring-mvc.xml中配置Hibernate-validator
<!--配置Hibernate-validator和Spring整合 -->
	<!--这里的这个认证器 使用的是 Spring的 -->
	<bean id="validator"
		class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
		<!--要整合的认证器的类的名字 -->
		<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
		<!--在认证的时候认证失败的时候的提示信息 -->
		<!-- <property name="validationMessageSource" ref="messageSource"/> -->
	</bean>

	<bean id="messageSource"
		class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="useCodeAsDefaultMessage" value="false" />
		<property name="defaultEncoding" value="UTF-8" />
		<property name="cacheSeconds" value="60" />
	</bean>

(3)实体类上加注释

在这里插入图片描述
在这里插入图片描述

  @NotNull(message = "班级名不能为空")
  @NotEmpty(message = "班级名不能为空字符串")
  @Length(min = 5,max = 10,message = "班级名长度在5到10之间")
  private String className;

  @Future(message = "输入日期不能小于当前日期")//必须是Date类型
  @DateTimeFormat(pattern = "yyyy-mm-dd")//springmvc中传入字符串转成date类型
  private Date classDate;
(4)控制器
 @ResponseBody
    @RequestMapping("/class_add")
    //这个里面就封装了错误信息  而且这个BindingResult不能单用 必须和@Valid一起使用
    public ResultMessage addClasses(@Valid Classes classes,BindingResult result){
        ResultMessage resultMessage=null;

        //首先要看 有没有校验出错
        int errorCount=result.getErrorCount();
        if(errorCount>0){  //说明有校验出错的地方
            //获取所有的错误
            List<FieldError>  errors=result.getFieldErrors();
            StringBuilder sb=new StringBuilder();
            //遍历这里面所有的错误
            for (FieldError fieldError : errors) {
                String msg=fieldError.getDefaultMessage();
                sb.append(msg);
            }
            resultMessage=new ResultMessage(500,sb.toString());

        }else {
            int count=classesService.addClasses(classes);
            if (count>0){
                resultMessage=new ResultMessage(200,"班级添加成功!");
            }else {
                resultMessage=new ResultMessage(500,"班级添加失败!");
            }
        }


        return resultMessage;
    }

4、已经做了前端验证,为什么还要做后端验证?

​ 用户可能不通过前端表单进行提交数据,可能用第三方软件Postman进行数据提交。

5、既然后端验证更加严谨,为什么还要做前端验证?

​ 前端验证可以过滤掉大量脏数据,减轻服务器压力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值