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参数,它们是一一对应的。

相关文章
相关标签/搜索