每日整理:SpringMVC的数据校验

数据校验的目的:      

1.前端校验:通过js验证:数据长度,数据空,格式匹配

2.后端校验:避免出现脏数据,保证数据安全和完整性,原因用户直接跳过页面请求后端(一般在进行更新操作时需要使用)

手动校验(忽略)

自动校验:使用校验框架

1.添加依赖:

 <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.17.Final</version>
    </dependency>

 2.在SpringMVC配置文件中配置校验器:使用已开发的框架

<!--1.配置数据校验器-->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!--指定实现接口的厂商-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    </bean>
	<!--2.将校验器添加到注解中提供支持-->
	<mvc:annotation-driven validator="validator"/>

3.在需要进行后端数据校验的实体的属性上设置校验注解

public class User {
    @NotEmpty(message = "用户名不能为空")
    @NotNull()
    private String username;

    @Size(min = 6,max = 12,message = "密码长度不合法")
    private String password;
    //省略其他代码
}

4.在控制器方法中开启校验,通过@Valib或@Validated标识参数(方法里的参数BindingResult是固定的,用来接收校验结果信息)

@RequestMapping("/login")
	@ResponseBody
    public String login(@Valid User user, BindingResult bindingResult){
        if(bindingResult.hasErrors()){//返回true表示存在校验失败消息
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            for (FieldError fieldError : fieldErrors) {
                System.out.println(fieldError.getDefaultMessage());
            }
            return "error";
        }
        return "success";
    }

5.通过前端页面进行测试

总结:

1.添加依赖

2.在SringMVC配置文件中开启校验

  <!--开启注解驱动和注解校验-->
    <mvc:annotation-driven validator="validator"/>
    <!--注册校验器:并指定使用Hibernate的校验器-->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!--指定服务提供商-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    </bean>

3.在Handler参数中,给需要进行校验的参数对象添加@Validated或@Valid

4.在Handler参数中,在需要校验的方法的参数对象后面添加一个BindingResult对象来接收校验结果信息

说明:如果参数列表中存在多个校验,每个@Valid后面跟着一个BindingResult,注意顺序

5.在Handler方法体中,调用BindingResult的hasErrors() 判断前端传递的参数是否符合校验规则,只要有一个不符合那么hasErrors方法的返回值都为true

6.在hasErrors的true逻辑中通过getAllErrors或getFieldErrors获取错误集合

7.遍历错误集合,调用每个对象的方法获取想要的错误信息(也可以直接将整个集合返回,让前端直接筛选[前端开发中多使用console.log()将返回的数据输出到控制台查看])

8.将封装好的错误信息返回给前端,前端再进行一些显示信息操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值