校验理解前端
通常是在前端使用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参数,它们是一一对应的。