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

一、什么是分组校验

校验规则是定义在实体中的,而同一个实体可以被多个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进行校验,这样就实现了分组校验的目的。是不是很简单?

《SpringMVC从入门到放肆》十四、SpringMVC分组数据校验的更多相关文章

  1. 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)

    上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...

  2. Bootstrap入门(二十四)data属性

    Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...

  3. 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

    http://blog.csdn.net/poem_qianmo/article/details/26977557 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  5. SpringMVC从入门到精通之第四章

    第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面.中间的业务逻辑是调用业务类处理的这个就是MVC设计模 ...

  6. 《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

    上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...

  7. 《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结

    到目前为止我们已经大概学习了StringMVC的执行流程,以及详细的处理器映射器和处理器适配器的执行流程,并可以自己写一个配置方式开发的小Demo了.今天我们来总结一下实现一个Controller的几 ...

  8. 《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器

    之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView.返回List.Map等等,这里就包含了传 ...

  9. 《SpringMVC从入门到放肆》十五、SpringMVC之上传文件

    上一篇我们学习了数据分组校验,已经可以灵活的在项目中进行数据校验了,今天来学习SpringMVC的上传文件功能.相对来说SpringMVC的上传功能,还是比较简单的. 一.添加依赖 <depen ...

随机推荐

  1. Moment.js简单使用

    1.设置语言环境,如设置中文环境: moment.locale("zh-cn"); 2.当前时间.指定时间: // 假设当前时间为:2018年12月10日 moment(); // ...

  2. gatewayworker开发单聊应用解决的问题

    绑定唯一id时,遇到的信息发送同步问题 问题:A-B A-C A发送信息给B和C时  A绑定了唯一id  若B.C发送信息给A则A处会同时手到来自于BC的信息 用解绑和生成新的client_id无法避 ...

  3. 【python系列】--Python变量和数据类型

    python数据类型 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用 ...

  4. Groovy Closure简介

    什么是闭包(Closure) 在Groovy中,闭包是一段匿名的代码段,它可以有参数,返回值,并且能够赋值给一个变量.闭包中使用的变量可以是在闭包外部定义的,也可以是在闭包内部定义的.

  5. 记录一下这几天遇到的坑(.netcore 代理问题)

    1.通过图片的网络url将图片转化为base64格式 方法如下: public static async Task<string> GetImageAsBase64Url(string u ...

  6. 用JDBC连接SQL Server2017数据库

    用JDBC连接SQL Server2017数据库 2018年03月26日 17:40:47 yasinzhang 阅读数:8346 安装完SQL server2017之后,选择SQL 身份验证登录,可 ...

  7. MySQL----下载安装

    MySQL 的官网下载地址:http://www.mysql.com/downloads/ 注意 1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持.2. M ...

  8. C#中判断DataReader是否为空的代码

    下面的内容是关于C#中判断DataReader是否为空的内容. if(DataReader.HasRows){}

  9. MVC Bundle生成的css路径问题

    项目是嵌套在主站的一个子站点,结果用CssRewriteUrlTransform来将相对目录路径改成相对网站根目录路径的时候发现少了虚拟目录的路径.最终解决方案: /// <summary> ...

  10. java中枚举起别名

    public enum Gender { MALE("男"),FELMALE("女"); private final String cValue; privat ...