校驗理解前端
通常是在前端使用js進行校驗。而使用服務器端的校驗,通常對安全性要求較高。java
服務端校驗spring
控制層:校驗頁面參數的合法性。這種校驗不區分客戶端的類型(瀏覽器,手機客戶端、遠程調用)瀏覽器
業務層:主要關鍵業務參數,僅僅限於service接口中的參數。緩存
持久層:通常不進行校驗。安全
#springmvc 校驗服務器
springmvc 使用hibernate 的校驗框架validation (和 hibernate 沒有任何關係)mvc
頁面提交的參數,請求到controller方法中,使用validation進行校驗校驗,若是出錯,將錯誤信息回顯到頁面上。
##具體需求 商品修改,添加校驗,若是出錯,在修改頁面顯示錯誤信息。app
##jar 包框架
在maven中搜索hibernate-validator-4.3.0就ok,它會自動幫你下載其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參數,它們是一一對應的。