zoukankan      html  css  js  c++  java
  • 《SpringMVC从入门到放肆》十四、SpringMVC分组数据校验

    上一篇我们学习了数据校验,但是在实际项目中,还是有些不够灵活,今天我们就来继续学习一种更灵活的数据校验方法——分组数据校验。

    一、什么是分组校验

    校验规则是定义在实体中的,而同一个实体可以被多个Controller使用,此时就会有问题,即:不同的Controller方法对同一个实体进行校验,此时这些校验信息是共享在这不同的Controller方法中的,但是实际上每个Controller方法可能需要不同的校验,在这种情况下,就需要使用分组校验来解决这种问题。

    或者说,一个实体中有很多属性,Controller中的方法一可能只需要校验实体中的属性1和属性2,而Controller中的方法二可能只需要校验实体中的属性3和属性4。这样的需求就需要用到分组校验了。

    二、定义分组

    其实就是定义空的接口,该接口的作用只作为分组标识来使用。

     

    分组1:

    package cn.itechyou.validate;
    
    /**
     * 分组1
     * @author Wangjn
     *
     */
    public interface ValidateGroup1 {
    
    }

    分组2:

    package cn.itechyou.validate;
    
    /**
     * 分组2
     * @author Wangjn
     *
     */
    public interface ValidateGroup2 {
    
    }

    三、添加校验失败提示

     

    user.name.notnull=姓名不能为空

    user.age.size=年龄必须大于18周岁

    user.address.notnull=地址不能为空

    user.email.notnull=邮箱不能为空

    四、新建实体

     

    package cn.itechyou.entity;
    
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    
    import cn.itechyou.validate.ValidateGroup1;
    import cn.itechyou.validate.ValidateGroup2;
    
    public class SysPersonInfo {
        @NotNull(message = "{user.name.notnull}",groups={ValidateGroup1.class})
        private String name;
        @Size(message = "{user.age.notnull}",groups={ValidateGroup1.class})
        private int age;
        @NotNull(message = "{user.address.notnull}",groups={ValidateGroup2.class})
        private String address;
        @Size(message = "{user.email.notnull}",groups={ValidateGroup2.class})
        private String email;
    
        //此处省略getter、setter
    
    }

    五、开发Controller

     

    package cn.itechyou.controller;
    
    import java.util.List;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import cn.itechyou.entity.SysPersonInfo;
    import cn.itechyou.validate.ValidateGroup1;
    import cn.itechyou.validate.ValidateGroup2;
    
    @Controller
    @RequestMapping("/person")
    public class PersonController {
        
        /**
         * 注册
         * @param model
         * @param person
         * @param result
         * @return
         */
        @RequestMapping("/reg")
        public String reg(Model model, @Validated(value = { ValidateGroup1.class }) SysPersonInfo person,
                BindingResult result) {
            if(result.hasErrors()) {
                List<ObjectError> allErrors = result.getAllErrors();
                for (ObjectError objectError : allErrors) {
                    System.out.println(objectError.getDefaultMessage());
                }
                model.addAttribute("errors", allErrors);
                return "login";
            }
            return "success";
        }
        
        /**
         * 修改信息
         * @param model
         * @param person
         * @param result
         * @return
         */
        @RequestMapping("/modify")
        public String modify(Model model, @Validated(value = { ValidateGroup2.class }) SysPersonInfo person,
                BindingResult result) {
            if(result.hasErrors()) {
                List<ObjectError> allErrors = result.getAllErrors();
                for (ObjectError objectError : allErrors) {
                    System.out.println(objectError.getDefaultMessage());
                }
                model.addAttribute("errors", allErrors);
                return "login";
            }
            return "success";
        }
    }

    上面Controller有两个方法,第一个是注册,我们只对name和age进行校验,第二个方法是修改信息,我们只对address和email进行校验,这样就实现了分组校验的目的。是不是很简单?

  • 相关阅读:
    使用jQuery操作DOM(ppt练习)
    使用jQuery操作dom(追加和删除样式-鼠标移入移出)练习
    Serializable接口
    过滤选择器(接上)
    内容过滤选择器
    基本过滤选择器
    IO流
    C语言打印100到200之间的素数
    续上篇结尾应用异或关系改变两个变量的值
    将两个整型变量的值互换的方法
  • 原文地址:https://www.cnblogs.com/xinhudong/p/10577337.html
Copyright © 2011-2022 走看看