1. 程式人生 > >015 參數校驗

015 參數校驗

warn 因此 enc value spring quest pri message 現在

一 . 概述

  前臺的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 參數校驗