`
yjhexy
  • 浏览: 331133 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

spring valang validate学习篇之 helloWorld

阅读更多

      最近接触到了这个东西,绕有兴趣,稍稍学习了一下。


啥也不说,现来练上一把,先来搭建我们的开发环境吧:

要用到的三方类库依赖:spring,spring-modules-validation,spring-test ,junit


我用的是maven,如果你用别的构建也可以,把以上类加到eclipse 的buildPath里面来就行了。

首先执行:

 

mvn archetype:generate

 

生成了目录

然后编辑POM如下:

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.yajun</groupId>
	<artifactId>valangDemo</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>valangDemo</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
			<version>2.0</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springmodules</groupId>
			<artifactId>spring-modules-validation</artifactId>
			<version>0.5</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>2.5</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>
</project>

 然后执行

 

mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true

 

导入eclipse。


创建 src/main/resources 源文件文件夹

创建valang.xml     如下:

 

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
			  "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	<bean id="userValidator" class="com.yajun.validate.UserValidate">
		<property name="valang">
			<value>
			<![CDATA[
				{ name  : ? is not null and ? has text and match('^abc.*$',?) is true
: 'Name is empty or too long.'}
				{ age : ? between 0 and 60 : 'Age should between 0 and 60.'}
				{ birthday : ? is null or ? >[20000101]
 : 'Birthday should be after 2000-01-01.'}
	    ]]>
			</value>
		</property>
		<property name="dateParsers">
			<map>
				<entry key="^\\d{8}$" value="yyyyMMdd" />
			</map>
		</property>
		<property name="addressValidator" ref="addressValidator" />
	</bean>

	<bean id="addressValidator" class="org.springmodules.validation.valang.ValangValidator">
		<property name="valang">
			<value>
			<![CDATA[
			{ state : ? is not null and  ? has text and length(?)<=50
 : 'state is empty or too long.'}
            { town : ? is not null and  ? has text and length(?)<=50
 : 'town is empty or too long.'}
            { street : ? is not null and  ? has text and length(?)<=50
 : 'street is empty or too long.'}
			]]>
			</value>
		</property>
	</bean>
</beans>

 

创建一个简单的JAVA类:

 

package com.yajun.dataobject;

import java.util.Date;

/**
 * 简单用户对象
 * 
 * @author yajun
 * 
 */
public class User {
	private String name; // 姓名 检验字符串格式校验
	private Date birthday; // 生日 检验时间格式校验
	private Address address; // 地址 检验复杂类型校验
	private int age; // 年龄 检验数字类型校验

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

}
 

创建复杂地址对象:

 

package com.yajun.dataobject;

/**
 * 地址信息
 * 
 * @author yajun
 * 
 */
public class Address {
	private String state; // 州
	private String town; // 镇
	private String street; // 街道

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public String getTown() {
		return town;
	}

	public void setTown(String town) {
		this.town = town;
	}

	public String getStreet() {
		return street;
	}

	public void setStreet(String street) {
		this.street = street;
	}
}
 

创建自定义的validate类:

 

package com.yajun.validate;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import org.springmodules.validation.valang.ValangValidator;

import com.yajun.dataobject.Address;
import com.yajun.dataobject.User;

/**
 * 自定义用户校验器
 * 
 * @author yajun
 * 
 */
public class UserValidate extends ValangValidator {
	private Validator addressValidator;

	public void setAddressValidator(Validator addressValidator) {
		this.addressValidator = addressValidator;
	}

	public void validate(Object target, Errors errors) {
		super.validate(target, errors);
		Address address = ((User) target).getAddress();
		// address 为 null 时,不进行进一步的验证。
		if (null != address) {
			// 注意与 popNestedPath 成对使用
			errors.pushNestedPath("address");
			// 验证 address
			addressValidator.validate(address, errors);
			errors.popNestedPath();
		}
	}
}

 

再整个单元测试跑一下吧:

 

package com.yajun;

import java.util.List;

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;

import com.yajun.dataobject.Address;
import com.yajun.dataobject.User;

/**
 * Unit test for simple App.
 */
public class UserValidatorTest extends AbstractDependencyInjectionSpringContextTests {
	private Validator userValidator;

	public UserValidatorTest() {
		super();
		// 缺省是AUTOWIRE_BY_TYPE,当Bean文件有2个以上的同类型
		// Bean定义时就应该采用AUTOWIRE_BY_NAME方式。
		setAutowireMode(AUTOWIRE_BY_NAME);
	}

	protected String[] getConfigLocations() {
		// 指明配置文件的位置
		return new String[] { "valang.xml" };
	}

	// 基类调用该方法完成依赖注入(DI)
	public void setUserValidator(Validator userValidator) {
		this.userValidator = userValidator;
	}

	public void testEmptyObject() {
		User user = new User();
		user.setName("");
		Address address = new Address();
		address.setState("中国");
		user.setAddress(address);
		BindException errors = new BindException(user, "target");
		userValidator.validate(user, errors);
		List<ObjectError> errorList = errors.getAllErrors();
		for (ObjectError o : errorList) {
			System.out.println(o.getDefaultMessage());
		}
	}

}

 

跑成功了吧。

 

 

 

分享到:
评论

相关推荐

    spring validate 笔记

    Spring MVC的validate功能是用于处理数据验证的一种机制,它允许我们在服务器端对用户提交的数据进行校验,确保数据的有效性和准确性。以下是对Spring validate框架的详细说明: 1. **页面准备**: 在HTML页面中,...

    spring3.x对应的validate全包

    在Spring 3.x版本中,`validate`标签指的是Spring的验证机制,这是一个非常重要的功能,用于确保应用程序接收到的数据是准确无误的。在Spring 3.x对应的`validate全包`中,通常会包含与数据验证相关的类库和配置文件...

    springboot-validate

    `SpringBoot validate`指的是Spring Boot集成Hibernate Validator进行参数验证的功能。Hibernate Validator是JSR-303/JSR-349标准的参考实现,提供了一种在Java应用中进行数据校验的优雅方式。 ** Hibernate ...

    Maven+Spring MVC +Hibernate Validate

    本项目" Maven+Spring MVC +Hibernate Validate" 提供了一种强大的技术栈,用于实现这一目标。它将Maven作为项目构建工具,Spring MVC作为后端控制器框架,而Hibernate Validate则负责服务端的数据验证。下面我们将...

    struts2学习制作helloworld

    对于初学者来说,"struts2学习制作helloworld"是一个很好的起点,它可以帮助理解Struts2的基础概念和核心功能。以下是这个主题中涵盖的一些关键知识点: 1. **Struts2项目的搭建步骤**: - 创建一个新的Java项目,...

    jquery.validate学习实例

    `jQuery Validate`是一个非常流行的JavaScript库,用于在前端进行表单验证。这个库极大地简化了网页表单数据的验证过程,使得开发者可以更方便地创建交互性强且用户体验良好的表单。在"jquery.validate学习实例"中,...

    spring 学习 validator例子

    在Spring框架中,Validator接口是用于数据验证的核心组件,它为我们的业务逻辑提供了一种标准的方式来验证对象的...学习这个例子,可以帮助你更好地理解和应用Spring的验证机制,提升你的Web应用程序的质量和用户体验。

    jquery_validate之学习

    《jQuery Validate插件详解与应用实践》 在Web开发中,表单验证是不可或缺的一环,它能够确保用户输入的数据符合预设的规则,从而提高数据的准确性和系统的稳定性。jQuery Validate是一个强大的JavaScript库,它为...

    validate方法

    在Java中,例如Spring框架,validate方法常常用于校验表单数据,它会根据预定义的约束验证对象属性。在MVC模式下,控制器接收用户请求后,可以调用模型对象的validate方法来检查数据的有效性,如果验证失败,会返回...

    Maven+Spring MVC +Hibernate Validate(服务端验证)

    标题 "Maven+Spring MVC +Hibernate Validate(服务端验证)" 描述的是一个使用现代Java Web开发技术栈构建的应用示例,其中包括三个核心组件:Maven、Spring MVC和Hibernate Validate。这个项目展示了如何整合这些...

    flower-validate-

    综上所述,"flower-validate-"是一个基于深度学习的花卉识别项目,利用TensorFlow框架处理的TFRecord格式数据集进行模型训练和验证。通过合理地组织和处理这些数据,我们可以构建出一个能够识别多种花卉的高效模型。

    比较好用的 FormValidate

    在描述中提到的“博文链接:https://cynan168.iteye.com/blog/466036”,这是一篇关于FormValidate的博客文章,虽然没有具体的内容,但我们可以推断这篇文章可能详细介绍了FormValidate的使用方法、功能特性以及可能...

    jquery.validate 版本大全

    jquery.validate.1.9.0.min.js jquery.validate.1.12.0.min.js jquery.validate.1.13.1.min.js jquery.validate.1.16.0.min.js jquery.validate.1.14.0.min.js jquery.validate.1.15.1.min.js jquery.validate....

    Struts1.3.8使用validate 校验日期格式的问题

    Struts1.3.8使用validate 校验yyyyMM日期格式报错 博文链接:https://pharaohsprince.iteye.com/blog/234369

    jquery_validate插件总结

    这是一个关于jquery_validate插件学习的总结,内容不多,但是都是干货,有兴趣的可以看一下。

    jquery validate例子

    本篇文章将深入探讨jQuery Validate插件的基本概念、主要功能以及一个实际的应用示例。 jQuery Validate插件的安装和引入相对简单,只需在HTML文件中包含jQuery库和jQuery Validate的JS文件即可。通常,我们会通过...

    mysql 安装密码校验插件validate_password.docx

    以下是安装validate_password插件的详细步骤,以及相关的配置和使用方法。 1. **修改配置文件** 首先,你需要编辑MySQL的配置文件,通常位于`/etc/my.cnf`(根据你的操作系统和安装路径可能有所不同)。使用命令`...

    jquery.validate.js下载

    jquery.validate.js jquery.validate.js

    jquery validate 信息气泡提示

    在网页开发中,jQuery Validate 是一个非常常用的验证插件,用于对用户输入的数据进行校验,确保数据的有效性和完整性。这个插件可以帮助开发者创建复杂的表单验证规则,提高用户体验,减少服务器端的压力。结合 ...

    vue+VeeValidate 校验范围实例详解(部分校验,全部校验)

    validate()可以指定校验范围内,或者是全局的 字段。而validateAll()只能校验全局。这篇文章主要介绍了vue+VeeValidate 校验范围(部分校验,全部校验) ,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics