文档章节

java中的Bean Validation

A__17
 A__17
发布于 2017/09/01 21:44
字数 732
阅读 54
收藏 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
粉丝 3
博文 121
码字总数 149658
作品 0
朝阳
私信 提问
加载中

评论(0)

java的Bean Validation 2.0

一、什么是Bean Validation 2.0。 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向java管理组织,JCP(Java Community Process)标准组织提出新增一个标准化技术规范的正...

王坤charlie
2019/05/06
57
0
Java参数验证Bean Validation 框架

1、为什么要做参数校验? 参数校验和业务逻辑代码分离,参数校验代码复用,统一参数校验方式、校验不太通过时统一异常描述。 2、bean validation规范 JSR303 规范(Bean Validation 规范)提...

osc_bnzpjhof
2019/03/02
6
0
Bean Validation规范

以下内容转载自:https://www.ibm.com/developerworks/cn/java/j-lo-beanvalid/ Bean Validation规范介绍 JSR303 规范(Bean Validation 规范)提供了对 Java EE 和 Java SE 中的 Java Bean ......

osc_wmsc0xiz
2019/03/26
2
0
从Spring-Boot开始深入理解Spring系列(五)——Spring-Boot集成JavaEE的JSR380的BV2.0规范

文章目录 基础概念 什么是JSR 什么是BV BV的实现有哪些? 为什么需要BV? 不用的现状(必要性) 使用的好处(意义) BV的应用场景: 基础应用 高级应用 在spring-boot中使用BV 使用Hibernate...

独孤文彬
2019/01/08
0
0
Java开发小技巧(六):使用Apache POI读取Excel

前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel、csv、xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化...

osc_wme0cmft
2018/10/14
10
0

没有更多内容

加载失败,请刷新页面

加载更多

认知智能类脑模型之理解技术体系简介道翰天琼

理解层在类脑模型认知层的下层,在学习层的上层。学习和理解本身也 是一体。学习本身包含了理解。这里的理解主要是机器学习之后的深度理解。理解层的核心包含三大部分符号,语言和图像的深度...

jackli2020
2分钟前
7
0
org.json的使用详解

jar下载 基于maven工程的pom文件配置: <!-- https://mvnrepository.com/artifact/org.json/json --><dependency><groupId>org.json</groupId><artifactId>json</artifactId>......

独钓渔
3分钟前
15
0
webpack.04-entry points

https://www.webpackjs.com/concepts/entry-points/ cnpm init -y cnpm i -D webpack webpack-cli 配置文件webpack.config.js module.exports={ mode:'development',//production 生产环......

_qq507570355
10分钟前
6
0
Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???

分页 + 排序 一.简单分页: 需求:分页查询台账表T_ACCOUNT,每页10条记录 分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询 我们首先显示前10条记录,语句如下: select rownu...

煌sir
38分钟前
125
0
使用JavaScript获取当前URL? - Get the current URL with JavaScript?

问题: All I want is to get the website URL. 我想要的只是获取网站URL。 Not the URL as taken from a link. 不是从链接获取的URL。 On the page loading I need to be able to grab the ......

技术盛宴
48分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部