015 参数校验

Posted 最爱五仁月饼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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提供的拦截器机制.

以上是关于015 参数校验的主要内容,如果未能解决你的问题,请参考以下文章

015---Django的forms组件

015.CI4框架CodeIgniter数据库操作之:带参数查询数

python015 Python3 函数

015_myBatis形参是字符串的错误

Struts2请求参数校验

原Java学习笔记015 - 面向对象