springmvc - validation
springmvc - validation
爱吃柠檬的橘子 发表于1年前
springmvc - validation
  • 发表于 1年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

校验理解

一般是在前端使用js进行校验。而使用服务器端的校验,一般对安全性要求较高。

服务端校验

控制层:校验页面参数的合法性。这种校验不区分客户端的类型(浏览器,手机客户端、远程调用)

业务层:主要关键业务参数,仅仅限于service接口中的参数。

持久层:一般不进行校验。

#springmvc 校验

springmvc 使用hibernate 的校验框架validation (和 hibernate 没有任何关系)

校验思路

页面提交的参数,请求到controller方法中,使用validation进行校验校验,如果出错,将错误信息回显到页面上。

##具体需求 商品修改,添加校验,如果出错,在修改页面显示错误信息。

##jar 包

在maven中搜索hibernate-validator-4.3.0就ok,它会自动帮你下载其jar包,及相关依赖包。 hibernate-validator 的相关jar包

##代码实现

一、配置校验器 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>

二、校验器配置到处理器适配器中 springmvc-serlvet.xml中配置

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

三、在po类中x配置校验

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

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

四、创建 CustomValidationMessages.properties

#添加错误的校验信息提示
items.name.length.error= 请输入1到20个字符
items.createtime.isNull= 请输入商品的生产日期

五、捕获错误校验信息

//商品信息修改提交
@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参数,它们是一一对应的。

  • 点赞
  • 收藏
  • 分享
粉丝 6
博文 177
码字总数 83973