zoukankan      html  css  js  c++  java
  • springmvc校验

    项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。 

    服务端校验:

             控制层conroller:校验页面请求的参数的合法性。

             业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。

             持久层dao:一般是不校验的。

    springmvc使用hibernate的校验框架validation,需要下载Hibernate Validation的jar包

    一、下载方法

      1、下载地址:https://sourceforge.net/projects/hibernate/files/hibernate-validator/

      2、点击要下载文件名

      3、点击即可下载

      4、解压找到jar包,在dis目录下的Hibernate-validator的核心组件

      Hibernate-validator依赖的必须组件

    二、Hibernate-validator应用

      开发思想:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面

      开发步骤:

        Ⅰ、jar包

          Hibernate-validator的核心组件和必须组件

        Ⅱ、配置校验器

        Ⅱ、校验器注入到处理器适配器中    

    <mvc:annotation-driven validator="validator"/>

        Ⅲ、添加校验规则

    public class Items {
        private Integer id;
    
        //校验名称在1到30字符中间
        //message是提示校验出错显示的信息
        @Size(min=1,max=30,message="{items.name.length.error}")
        private String name;
    
        private Float price;
    
        private String pic;
    
        //非空校验
        @NotNull(message="{items.createtime.isNUll}")
        private Date createtime;

        Ⅳ、CustomerValidationMessage.properties

          在CustomValidationMessages.properties配置校验错误信息

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

        Ⅴ、捕获校验错误信息

    @RequestMapping("/editItemsSubmit")
        public String editItemsSubmit(Model model,@Validated ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception {

    在需要校验的参数前边添加@Validated,并在其后添加BindingResult bindingResult接收校验出错信息

    注意:@Validated和BindingResult bindingResult是配对出现,并且形参顺序是固定的(一前一后)

        Ⅵ、页面显示校验错误信息

          ①、将校验错误信息渲染到request域中,并返回页面

        @RequestMapping("/editItemsSubmit")
        public String editItemsSubmit(Model model,@Validated ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception {
            // 获取校验错误信息
            if (bindingResult.hasErrors()) {
                // 输出错误信息
                List<ObjectError> allErrors = bindingResult.getAllErrors();
    
                for (ObjectError objectError : allErrors) {
                    // 输出错误信息
                    System.out.println(objectError.getDefaultMessage());
    
                }
                // 将错误信息传到页面
                model.addAttribute("allErrors", allErrors);
                
                
                //可以直接使用model将提交pojo回显到页面
                model.addAttribute("items", itemsCustom);
                
                // 出错重新到商品修改页面
                return "items/editItems";
            }

          ②、校验错误信息显示到页面

    <!-- 显示错误信息 -->
    <c:if test="${allErrors!=null }">
        <c:forEach items="${allErrors }" var="error">
            ${ error.defaultMessage}<br/>
        </c:forEach>
    </c:if>

    三、校验分组

    在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验可能不同,这时候就需要通过分组的方式来区分哪些方法使用对应的校验。

    分组:其实是一个java接口,并且接口中不需要定义任何方法

      Ⅰ、定义分组

    public interface ValidGroup1 {
    
    }

      Ⅱ、校验规则中添加分组

        //groups:此校验属于哪个分组,groups可以定义多个分组
        @Size(min=1,max=30,message="{items.name.length.error}", groups = ValidGroup1.class)
        private String name;

      Ⅲ、controller方法使用指定分组的校验

        @RequestMapping("/editItemsSubmit")
        public String editItemsSubmit(Model model,@Validated(value= {ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult) 
                throws Exception {

      Ⅳ、结果

      

  • 相关阅读:
    asp.net mvc4 webapi request获取参数
    各种加密和解密算法的实现
    SQL 排序的简单用法
    aiofiles拆分大文件
    21.11.16模拟 学校
    P3178 [HAOI2015]树上操作
    21.11.16模拟 bzoj3306树
    SP1557 GSS2 Can you answer these queries II
    21.11.16模拟 问题
    21.11.16模拟 真菌
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15029763.html
Copyright © 2011-2022 走看看