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 ...
随机推荐
- 第三章 python中的字符串
一.字符串的基本操作 所有标准的序列操作对字符串同样适用,如索引.分片.乘法.判断成员是否存在.求长度.最大值和最小值等.记住一点,字符串是不可变的. 二.字符串中重要的方法 1.find(subst ...
- 【Flask】query可用参数
### query可用参数:1. 模型对象.指定查找这个模型中所有的对象.2. 模型中的属性.可以指定只查找某个模型的其中几个属性.3. 聚合函数. * func.count:统计行的数量. * fu ...
- Android蓝牙串口通讯【转】
本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...
- vim 的配置文件(.vimrc)
linux 下面的root的主目录中新建.vimrc配置文件,配置文件注析方式为“,不是#: 如: "显示行号 set number set ruler
- Delpih - Format
Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用: 首先看它的声明:function Format(const Format: ...
- QuickReport FastReport
一.QuickReport1.安装Component->Install packages->X:/Program Files/Borland/Delphi7/Bin/dclqrt70.bp ...
- STL list链表的用法详解
本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函 ...
- python-socket2
UDP,服务端 #! /usr/bin/env python #coding=utf-8 import socket #创建socket,指定ipv4,udp类型 s = socket.socket( ...
- python生成excel格式座位表
脚本分两个文件: 1.生成二维随机列表:GenerateLocaltion.py 2.将列表导入excel文件:CreateExcel.py 先上GenerateLocaltion.py: impor ...
- Linux下MySQL的数据文件存放在哪里的
mysql> show variables like '%dir%';+-----------------------------------------+------------------- ...