springmvc - validation

校驗理解前端

通常是在前端使用js進行校驗。而使用服務器端的校驗,通常對安全性要求較高。java

服務端校驗spring

控制層:校驗頁面參數的合法性。這種校驗不區分客戶端的類型(瀏覽器,手機客戶端、遠程調用)瀏覽器

業務層:主要關鍵業務參數,僅僅限於service接口中的參數。緩存

持久層:通常不進行校驗。安全

#springmvc 校驗服務器

springmvc 使用hibernate 的校驗框架validation (和 hibernate 沒有任何關係)mvc

校驗思路

頁面提交的參數,請求到controller方法中,使用validation進行校驗校驗,若是出錯,將錯誤信息回顯到頁面上。

##具體需求 商品修改,添加校驗,若是出錯,在修改頁面顯示錯誤信息。app

##jar 包框架

在maven中搜索hibernate-validator-4.3.0就ok,它會自動幫你下載其jar包,及相關依賴包。 hibernate-validator 的相關jar包

##代碼實現

1、配置校驗器 springmvc- servlet.xml中配置

<!-- 校驗器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactor
    <!-- hibernate校驗器-->
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    <!-- 指定校驗使用的資源文件,在文件中配置校驗錯誤信息,若是不指定則默認使用classpath下的ValidationMessages.properties -->
    <property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校驗錯誤信息配置文件 -->
<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <!-- 資源文件名-->
    <property name="basenames">
        <list>
            <value>CustomValidationMessages</value>
        </list>
    </property>
    <!-- 資源文件編碼格式 -->
    <property name="fileEncodings" value="utf-8" />
    <!-- 對資源文件內容緩存時間,單位秒 -->
    <property name="cacheSeconds" value="120" />
</bean>

2、校驗器配置處處理器適配器中 springmvc-serlvet.xml中配置

<mvc:annotation-driven conversion-service="conversionService"
validator="validator"/>

3、在po類中x配置校驗

@Size(min = 1,max = 20,message = "{items.name.length.error}")
private String name;

@NotNull(message = "{items.createtime.isNull}")
private Date createtime;

4、建立 CustomValidationMessages.properties

#添加錯誤的校驗信息提示
items.name.length.error= 請輸入1到20個字符
items.createtime.isNull= 請輸入商品的生產日期

5、捕獲錯誤校驗信息

//商品信息修改提交
@RequestMapping(value=("/editItemsSubmit"),method = {RequestMethod.GET,RequestMethod.POST})
public String editItemsSubmit(Model model, HttpServletRequest request, Integer id,
                              @Validated ItemsCustom itemsCustom, BindingResult bindingResult)throws Exception {
    if (bindingResult.hasErrors()) {
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        for (ObjectError allError : allErrors) {
            System.out.println(allError.getDefaultMessage());
        }
        model.addAttribute("allErrors", allErrors);
        return "items/editItems";
    }
    ...
}

注意:

處理器方法必須給定包含Errors的參數,這能夠是Errors自己,也能夠是它的子類BindingResult。

並且這個參數是必須緊挨着@Valid參數的,即必須緊挨着須要校驗的參數,這就意味着咱們有多少個@Valid參數就須要有多少個對應的Errors參數,它們是一一對應的。

相關文章
相關標籤/搜索