• 015 参数校验


    一 . 概述

      前台的js校验我们总是不可相信的,因此后台的校验就是最后一道防线,做为一个mvc框架springmvc也提供了一整套的校验框架.


    二 . 参数验证

      springmvc支持jsr303,使用hibernate validate帮助我们实现Bean的校验.

      首先我们需要加入hibernate validate的支持.  

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

    我们使用的是hibernate-validate作为数据验证的实现.

      修改之前的Bean的定义:  

    @SuppressWarnings("serial")
    public class User implements Serializable{
        
        @NotNull(message="用户名不能为空")
        @Length(min=3,max=10,message="用户名必须在3到10位之间.")
        private String name;
        
        private int age;

    我们在Bean之上添加了验证需要的注解元素.

    最后,我们需要将我们的验证器进行配置:  

        <mvc:annotation-driven validator="validator"></mvc:annotation-driven>
        
        
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
        </bean>

    现在我们就进行测试:

      当我们输入了不合法的参数的时候,页面就会被重定向到400,参数不正确的页面提示上去.

      这就说明了,我们配置的hibernate-validate生效了.


    三. 错误信息的获取

      在上面我们看到了我们的验证实际上已经生效了,但是我们却没有获取到错误信息.

      下面我们说一下,错误信息的获取方式.

    @RequestMapping("/validate")
        public String validate(@Validated User user,BindingResult result) {
            System.out.println("验证成功了...");
            //如果验证中有错误信息
            if(result.hasErrors()) {
                //获取错误信息
                List<ObjectError> allErrors = result.getAllErrors();
                for(ObjectError err : allErrors) {
                    System.out.println(err.getDefaultMessage());
                }
            }
            return "/WEB-INF/jsp/success.jsp";
        }

    在上面的代码之中,我们获取到了错误的信息.

      当然在实际的过程之中,如果我们获取了错误了信息,就应该将错误的信息返回给用户.上面的代码只是解释获取错误信息的方式.


    三 . 总结

      虽然springmvc提供了这样的一个验证机制,但是这个机制说起来使用也是非常麻烦的,就是单单对这些属性的校验规则的编写,我们就十分的头疼了.

      我们在实际之中,更可能的是自己封装了一个校验机制,比如使用springmvc提供的拦截器机制.

  • 相关阅读:
    c语言----- 冒泡排序 for while do-while 递归练习
    c语言----实战植物大战僵尸
    c语言-----劫持系统03
    c语言-----劫持自己02
    c语言-----劫持原理01
    win10神州网信政府版去掉屏保
    将WebApi发布到IIS上(IIS6.0)(转)
    关于Logstash中grok插件的正则表达式例子
    说说看板在项目中的应用
    解决Gradle报错找不到org.gradle.api.internal.project.ProjectInternal.getPluginManager()方法问题
  • 原文地址:https://www.cnblogs.com/trekxu/p/9130023.html
Copyright © 2020-2023  润新知