015 參數校驗
阿新 • • 發佈:2018-06-03
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; privateint 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 參數校驗