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

一、什么是分组校验

校验规则是定义在实体中的,而同一个实体可以被多个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. word20170107当地交通 Local transportation有用的词和句子

    有用的词: transportation: 交通 airport express: 机场快线 shuttle bus: 班车 taxi/cab: 出租车 meter: 打表 limousine:专车. ...

  2. 004 使用scrapy框架爬虫

    0. 建立housePro的scrapy爬虫框架 # 1. 在终端输入,建立housePro项目scrapy startproject housePro# 2. 进入houseProcd houseP ...

  3. SkyReach 团队团队展示

    班级:软件工程1916|W 作业:团队作业第一次-团队展示 团队名称:SkyReach 目标:展示团队风采,磨合团队 队员姓名与学号 队员学号 队员姓名 个人博客地址 备注 221600107 陈某某 ...

  4. PostgreSQL对汉字按拼音排序

    转自:https://www.cnblogs.com/gaojian/p/3188609.html postgres=# \l List of databases Name | Owner | Enc ...

  5. 详解MariaDB数据库的存储过程

    1.什么是存储过程 很多时候,SQL语句都是针对一个或多个表的单条语句.但是也有时候有的查询语句需要进行多次联表查询才能完成,此时就需要用到存储过程了. 存储过程(Stored Procedure)是 ...

  6. Ipa 脱壳工具 Clutch dumpdecrypted 使用

    1  Clutch 使用 下载地址 : https://github.com/kjcracks/clutch/releases 下载之后去掉去掉版本号 拖入手机的 /usr/bin/ 目录下 执行 c ...

  7. jQuery之cookie操作

    Cookies 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery.cookie.js基于jquery:先引入jquery,再引入:jq ...

  8. Integer.valueOf()与Integer.parseInt()区别

    Integer.parseInt()和Integer.valueOf()有本质区别,具体如下列: Integer.parseInt()把String   型转换为Int型,  Integer.valu ...

  9. vue交互

    1)如果vue想做交互,本身的框架是不支持的,需要引入vue-resurce库交互方式:get.post.jsonp 1.get方式methods: {    get: function () { / ...

  10. 末学者笔记--Linux权限管理

    一.权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3 ...