Validation校验(一)

    xiaoxiao2021-03-26  36

    校验理解 项目中,通常使用较多的是前端的校验,比如页面中的js校验,对于安全要求较高点建议在服务端进行校验 服务端校验 控制层Controller:校验页面请求的参数合法性,在服务端控制层Controller校验,不区分客户端类型(浏览器,手机客户端,远程接口调用等) 业务层service:主要校验关键业务参数,仅限于service接口中使用的参数 持久层dao:一般是不校验的 springmvc校验 springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。 校验思路: 页面提交请求的参数,请求到Controller方法中,使用validation进行校验,如果校验出错,将错误信息展示到页面 需求: 用户信息修改,添加校验 环境准备 hibernate的校验框架validation所需要的jar包: 配置校验器 springmvc.xml <!-- 校验 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 校验器 --> <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>classpath:CustomValidationMessages</value> </list> </property> <!-- 资源文件编码格式 --> <property name="fileEncodings" value="utf-8" /> <!-- 对资源文件内容缓存时间,单位秒 --> <property name="cacheSeconds" value="120" /> </bean> 新建校验信息资源文件 CustomValidationMessages.properties 校验器注入到处理器适配器中 springmvc.xml <mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven> 在pojo中添加校验规则 //检查名称在3到5个字符中间 @Size(min = 3, max = 5, message = "{user.name.length}") private String name; // 年龄不能为空 @NotNull(message = "{user.age.isNull}") private Integer age; Controller添加验证 // 需要在校验的pojo前边添加@Validated,在需要校验的pojo后边添加BindingResult接收校验输出错误信息 // 注意:@Validated和BindingResult是配对出现,并且形参顺序是固定的(一前一后) @RequestMapping("/editUserSubmit") public String editUserSumit(Model model, Integer id, @Validated UserCustom userCustom, BindingResult bindingResult) throws Exception { if (bindingResult.hasErrors()) { List<ObjectError> errors = bindingResult.getAllErrors(); for (ObjectError objectError : errors) { System.out.println(objectError.getDefaultMessage()); } model.addAttribute("errors", errors); // 重定向 return "user/editUser"; } else { usersService.updateUser(id, userCustom); // 重定向 return "redirect:queryUsers.action"; } } jsp页面显示错误信息 <c:if test="${errors!=null }"> <tr> <td><c:forEach items="${errors }" var="error"> ${error.defaultMessage }<p /> </c:forEach></td> </tr> </c:if>
    转载请注明原文地址: https://ju.6miu.com/read-658290.html

    最新回复(0)