spring 4.0 注解数据验证2
在spring 4.0 注解数据验证1中有基本的数据验证方法。还是那个POJO:
package com.suyin.pojo;
import java.lang.reflect.Field;
import org.hibernate.validator.constraints.NotBlank;
public class People {
private int id;
@NotBlank
private String name;
private String address;
private int age;
public final int getId() {
return id;
}
public final void setId(int id) {
this.id = id;
}
public final String getName() {
return name;
}
public final void setName(String name) {
this.name = name;
}
public final String getAddress() {
return address;
}
public final void setAddress(String address) {
this.address = address;
}
public final int getAge() {
return age;
}
public final void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", address=" + address
+ ", age=" + age + "]";
}
public People set(String name, Object obj) {
try {
Field f = this.getClass().getDeclaredField(name);
f.setAccessible(true);
f.set(this, obj);
} catch (NoSuchFieldException | SecurityException
| IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return this;
}
}
有如下需求: 添加时要保证name不为空;修改时要保证name和address不为空。这怎么办?
spring4.0 提供了解决方案。先写两个标志接口 First和Second,类似于java.io.Serializable,如下:
package com.suyin.my.va;
public interface First {}
和
package com.suyin.my.va;
public interface Second {}
改造People如下:
package com.suyin.pojo; import java.lang.reflect.Field; import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank; import com.suyin.my.va.First;
import com.suyin.my.va.Second; public class People { private int id; @NotBlank(groups= {First.class,Second.class})
private String name; @NotBlank(groups= {Second.class})
private String address; private int age; public final int getId() {
return id;
} public final void setId(int id) {
this.id = id;
} public final String getName() {
return name;
} public final void setName(String name) {
this.name = name;
} public final String getAddress() {
return address;
} public final void setAddress(String address) {
this.address = address;
} public final int getAge() {
return age;
} public final void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "People [id=" + id + ", name=" + name + ", address=" + address
+ ", age=" + age + "]";
} public People set(String name, Object obj) {
try {
Field f = this.getClass().getDeclaredField(name);
f.setAccessible(true);
f.set(this, obj);
} catch (NoSuchFieldException | SecurityException
| IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return this;
} }
在name上加了 @NotBlank(groups= {First.class,Second.class})
在address上加了 @NotBlank(groups= {Second.class})
可以猜测当遇到 First标志时会验证name,在遇到Second标志时会验证name和address。 那么现在只要告诉spring验证时使用First还是Second标志就可以了。
在Controller中有方法
@RequestMapping(value="/add")
public String add(@Validated(First.class) People p,BindingResult result, HttpServletRequest request) {
if(result.hasErrors()) {
System.out.println(result.getFieldErrors());
return "error";
}
this.peopleService.add(p);
return "people/detail";
} @RequestMapping("/update")
public String update(@Validated(Second.class) People p,BindingResult result,HttpServletRequest request) {
if(result.hasErrors()) {
System.out.println(result.getFieldErrors());
return "error";
}
this.peopleService.update(p);
return "people/detail";
}
在每个方法参数People p之前,把原来的@Valid改为了@Validated,并且分别加上了参数First.class和Second.class。
初步发觉@Valid和@Validated不能混用。也就是说如果在field上加了 groups={xxx.class},那么就没法用@Valid了,必须用@Validated
spring 4.0 注解数据验证2的更多相关文章
- spring 4.0 注解数据验证1
通常情况下,数据验证都分为前台验证,后台验证.并且前台JS验证是肯定有的,那么其实验证的错误信息根本不必通过后台传过去,哪怕就是想国际化,前台JS也能够胜任. 如果前台验证足够了,那么如果还有不正确的 ...
- Spring 3.0 注解
原文 :http://www.blogjava.net/ashutc/archive/2011/04/14/348270.html 另两 参考博客 : http://kingtai168.iteye. ...
- Spring 3.0 注解注入详解
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- spring(7)--注解式控制器的数据验证、类型转换及格式化
7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...
- Spring MVC 数据验证——validate注解方式
1.说明 学习注解方式之前,应该先学习一下编码方式的spring注入.这样便于理解验证框架的工作原理.在出错的时候,也能更好的解决这个问题.所以本次博客教程也是基于编码方式.仅仅是在原来的基础加上注解 ...
- Hibernate Validation,Spring mvc 数据验证框架注解
1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)
这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 之前在使用Struts2实现MVC的注解时,是借助struts2-conventi ...
- Spring MVC 使用介绍(十三)数据验证 (一)基本介绍
一.消息处理功能 Spring提供MessageSource接口用于提供消息处理功能: public interface MessageSource { String getMessage(Strin ...
- Spring MVC 数据验证——validate编码方式
1.导入jar包 validation-api-1.0.0.GA.jar这是比較关键的一个jar包,主要用于解析注解@Valid. hibernate-validator-4.3.2.Final.ja ...
随机推荐
- P1393 动态逆序对
题目 P1393 动态逆序对 做题前写篇博客是个好方法 做法 题目规定仅有删除,给每个位置标个号,逆序对+时间轴,显然这是个三维偏序 很久没做过\(cdq\)了,就当模板题讲一下: 按删除的先后顺序为 ...
- Idea中配置Tomcat7的JNDI
1.进入目录 D:\apache-tomcat-7.0.73\conf\Catalina\localhost 添加hello.xml ,内容为: <Context path="/hel ...
- 51nod 1525 && CF566D
题意:给定n个元素,现在有2种合并操作和1种询问操作 1.单独合并两个元素所在的集合 2.合并一个区间内的元素所在的集合 询问:两个元素是否属于统一集合 神犇题解 感觉又涨了新姿势啊..我们最恼火的是 ...
- EntityFramework 学习 一 枚举
1. Convert an existing property to Enum: using (var ctx = new SchoolDBEntities()) { Teacher tchr = n ...
- Linux- AWS之EC2大数据集群定时开关机
众所周知,云计算就是在计算你的钱,每当ec2开起来就要开始计费.当用户购买了一个庞大的与服务器做一个集群,尤其是用来做大数据集群,这些服务器的配置相当高,每台服务器所需要的费用不菲.其实在很多时候没能 ...
- BZOJ 3890 [Usaco2015 Jan]Meeting Time:拓扑图dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3890 题意: 给你一个有向图,n个点(n <= 100),m条边. 且所有的边都是从 ...
- 详细的.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
- linux 在后台运行数据库导入导出命令
nohup imp dbusername/password@orcl file=/home/20170928.dmp ignore=y log=/home/oracle/20170928.log fu ...
- wcf win7上使用net.tcp出现不支持协议问题解决
第一:iis绑定 net.tcp 808:* 第二:iis 应用中高级开启协议,添加net.tcp多协议逗号隔开 第三:开启各项服务 第四:执行 ServiceModReg.exe -r
- bzoj 4765: 普通计算姬 主席树+替罪羊树思想
题目大意: 给定一棵\(n\)个节点的带权树有根树,设\(sum_p\)表示以点\(p\)为根的这棵子树中所有节点的权 计算姬支持下列两种操作: 给定两个整数\(u,v\),修改点\(u\)的权值为\ ...