校验理解
一般是在前端使用js进行校验。而使用服务器端的校验,一般对安全性要求较高。
服务端校验
控制层:校验页面参数的合法性。这种校验不区分客户端的类型(浏览器,手机客户端、远程调用)
业务层:主要关键业务参数,仅仅限于service接口中的参数。
持久层:一般不进行校验。
#springmvc 校验
springmvc 使用hibernate 的校验框架validation (和 hibernate 没有任何关系)
校验思路
页面提交的参数,请求到controller方法中,使用validation进行校验校验,如果出错,将错误信息回显到页面上。
##具体需求 商品修改,添加校验,如果出错,在修改页面显示错误信息。
##jar 包
在maven中搜索hibernate-validator-4.3.0就ok,它会自动帮你下载其jar包,及相关依赖包。
##代码实现
一、配置校验器 springmvc- servlet.xml中配置
CustomValidationMessages
二、校验器配置到处理器适配器中 springmvc-serlvet.xml中配置
三、在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()) { ListallErrors = bindingResult.getAllErrors(); for (ObjectError allError : allErrors) { System.out.println(allError.getDefaultMessage()); } model.addAttribute("allErrors", allErrors); return "items/editItems"; } ...}
注意:
处理器方法必须给定包含Errors的参数,这可以是Errors本身,也可以是它的子类BindingResult。
而且这个参数是必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数,这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的。