文档章节

java中的Bean Validation

A__17
 A__17
发布于 2017/09/01 21:44
字数 732
阅读 10
收藏 0

概念:java中的Bean Validation是一个数据验证的规范。

说明:Hibernate Validator是Bean Validation的一个具体实现。

举例:在springMVC中使用Hibernate Validator

1)maven依赖:
	<dependency>
		<groupId>javax.validation</groupId>
		<artifactId>validation-api</artifactId>
		<version>1.1.0.Final</version>
	</dependency>
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-validator</artifactId>
		<version>5.1.2.Final</version>
	</dependency>

2)JavaBean:

	import javax.validation.constraints.NotNull;
	import org.hibernate.validator.constraints.NotBlank;

	/**
	 * 在需要进行校验的属性上添加相应的注解:
	 * 
	 * 1)Bean Validation 提供的 constraint:       
	 * 		[@Null](https://my.oschina.net/u/561366)   	被注释的元素必须为 null       
	 *		[@NotNull](https://my.oschina.net/notnull)    被注释的元素必须不为 null       
	 *		@AssertTrue     被注释的元素必须为 true       
	 *		[@AssertFalse](https://my.oschina.net/u/2430840)    被注释的元素必须为 false       
	 *		@Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
	 *		@Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
	 *		@DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值       
	 *		@DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值       
	 *		@Size(max=, min=)   被注释的元素的大小必须在指定的范围内       
	 *		@Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内       
	 *		@Past		 被注释的元素必须是一个过去的日期       
	 *		@Future		 被注释的元素必须是一个将来的日期       
	 *		@Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式  
	 *		     
	 * 2)Hibernate Validator 特有的 constraint:
	 *		@NotBlank(message =)	验证字符串非null,且长度必须大于0 
	 *		@NotEmpty				被注释的字符串或集合的必须非空       
	 *		@Email  				被注释的元素必须符合email的格式       
	 *		@Length(min=,max=)		被注释的字符串的大小必须在指定的范围内             
	 *		@Range(min=,max=,message=)	被注释的元素必须在合适的范围内 
	 *		
	 */	
	public class User {
		 
		@NotBlank(message = "name is null!")
		private String name;

		@NotNull(message = "age is null!")
		private Integer age;

		private String email;

		private String address;

		// getter and setter ..
		
	}
	
3)控制器:

	import javax.validation.Valid;
	import org.springframework.validation.BindingResult;
	import org.springframework.validation.ObjectError;
	import org.springframework.web.bind.annotation.RequestMapping;
	import org.springframework.web.bind.annotation.RequestBody;
	import org.springframework.web.bind.annotation.RequestMethod;

	@RestController
	@RequestMapping("/sys")
	public class UserController {

		/**
		 * 1.给需要校验的参数添加 @Valid注解 
		 * 2.给方法添加一个类型为 BindingResult的参数,用来封装 校验的结果
		 */
		@RequestMapping(value = "/user/add", method = RequestMethod.POST)
		public String addUser(@Valid @RequestBody User req, BindingResult bindingResult) {
			
			if (bindingResult.hasErrors()) {
				List<ObjectError> allErrors = bindingResult.getAllErrors();
				List<String> msgs = new ArrayList<String>();
				for (ObjectError objectError : allErrors) {
					String msg = objectError.getDefaultMessage();
					msgs.add(msg);
				}
				String paramErrorMsg = StringUtils.join(msgs, " & ");
				return paramErrorMsg;
			} else {
				System.out.println("do add user.");
				return "success!";
			}
		}
	}

4)接口测试:

	地址:http://localhost:8081/jxn-web/api/sys/user/add
	
	请求类型:Content-Type: application/json

	参数:
		{"name":"","age":null}		==> 响应内容:age is null! & name is null!
		{"name":"","age":""}		==> 响应内容:age is null! & name is null!
		{"name":"jack","age":"17"}	==> 响应内容:success!

常见错误:

报错:javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.

分析:是由于@NotBlank修饰了Integer、Long等引用类型的属性
eg:
	@NotBlank
	private Integer age;
	
修正:应该使用@NotNull来修饰引用类型的属性。
	@NotNull
	private Integer age;

© 著作权归作者所有

共有 人打赏支持
A__17
粉丝 2
博文 100
码字总数 117532
作品 0
朝阳
私信 提问
Bean Validation 技术规范特性概述

数据验证在 Java 分层结构的应用开发中占据着重要位置。Java EE 6 提出了 Bean Validation 规范,使用注解的方式对 Java Bean 进行约束验证,不局限于某一层次或者某一编程模型,灵活易用。本...

IBMdW
2011/03/28
0
0
Bean Validation (JSR 303) 发布最终草案

Bean Validation (JSR 303) 发布最终草案,你可以从JCP 网站中下载该草案。 Bean Validation 是一个数据验证的规范,通过使用 Java 的注释 (Annotation) ,例如 @NotNull @Email 等,来对域模...

红薯
2009/04/01
815
0
CDI(Weld)整合整合JavaEE环境组件资源

除了基础部分和高级部分,CDI的第三个主题是整合。 CDI还设计了通过SPI提供集成点到Java EE平台的协同工作的平台之外的技术[在Java EE 6发布后,各种各样的Java EE平台扩展(构建在CDI扩展SPI之...

Zhao-Qian
2014/05/18
0
2
Apache TomEE 1.0 正式版发布

Apache TomEE 1.0 正式版发布了,该版本在启动时间上比上个 Beta 版本缩短了 1-3 倍。通过了完整的 Java EE 6 Web-Profile 认证。 Apache TomEE 是经过 J2EE 6 认证的 Tomcat 企业版本,Tom...

红薯
2012/05/01
1K
10
Java 应用服务器 WildFly 14 发布,支持 Java EE8

WildFly 14 Final 已发布,可点此下载。 WildFly 14 已通过 Java EE8 认证,因此默认的 EE7 模式和 EE8 预览选项已被删除。服务器现在在所有运行模式下仅提供 EE8 API 。由于 Java EE8 向后兼...

王练
09/01
832
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
17分钟前
0
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
20分钟前
2
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
3
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部