文档章节

java中的Bean Validation

A__17
 A__17
发布于 2017/09/01 21:44
字数 732
阅读 8
收藏 0
点赞 0
评论 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
博文 91
码字总数 102581
作品 0
朝阳
WildFly 13 "Baker's Dozen" 发布,改进 Java 10 兼容性

WildFly 13 Final 已正式发布,并提供了下载地址。下面不妨来看一下有哪些值得关注的更新。 EE8 功能和新的发布模型 这是使用新季度交付模式之后发布的第二个版本。该计划是在完全完成的增量...

局长 ⋅ 06/02 ⋅ 0

java面试必备之ThreadLocal

按照传统的经验,如果某个对象是非线程安全的,在多线程环境下对象的访问需要采用synchronized进行同步。但是模板类并未采用线程同步机制,因为线程同步会降低系统的并发性能,此外代码同步解...

编程老司机 ⋅ 05/16 ⋅ 0

Oracle Java Mission Control 帮助

缩写 含义 JDK Java 开发工具包 JDP Java Discovery Protocol JFR Java 飞行记录器 JMC Java Mission Control JMX Java Management Extensions JVM Java 虚拟机 MBean 托管 Bean (Java) RCP ......

光斑 ⋅ 04/27 ⋅ 0

关于编写Java程序让Jvm崩溃

  今天在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂。带着问题查了一下,百度知道里面有这样一个答案:   1 package jvm;   2   3 public clas...

thinkyoung ⋅ 2014/11/01 ⋅ 0

YMP v2.0.5 发布,轻量级 Java 应用开发框架

YMP v2.0.5 发布了。本次版本更新主要是新增若干新特性、增加对Beetl模板引擎的支持,同时针对框架问题修复、移除编译警告及性能优化,并对依赖包升级更新。 YMP是一个非常简单、易用的轻量级...

有理想的鱼 ⋅ 04/25 ⋅ 0

Jmeter之Bean shell使用

 上一篇简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求。本节内容如下: 一、操作变量 二、操作属性 三、...

覃光林 ⋅ 05/10 ⋅ 0

Java并发编程之ThreadLocal源码分析

多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,多线程访问同一个共享变量特别容易出现并发问题,特别是多个线程需要对一个...

狂小白 ⋅ 06/03 ⋅ 0

第二章 第一节 spring-beans之BeanNameGenerator深入详解

前言 BeanNameGenerator是beans体系非常重要的一个组件,主要功能是从一定的条件中计算出bean的name.如果出现问题,是可以规避的。同样可以重写解决。 从上面的数据中可以看出,bean的管理基...

鸟菜啊 ⋅ 04/26 ⋅ 0

Spring-Batch处理MySQL数据后存到CSV文件

1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件。 1.1 准备表及数据 2 实现 2.1 项目目录 2.2 实体类 2.3 ItemReader TestUse...

yysue ⋅ 05/26 ⋅ 0

SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance ⋅ 06/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 19分钟前 ⋅ 0

从零手写 IOC容器

概述 IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。 1. Component注解定义 package cn.com.qunar.annotation;impo...

轨迹_ ⋅ 20分钟前 ⋅ 0

系统健康检查利器-Spring Boot-Actuator

前言 实例由于出现故障、部署或自动缩放的情况,会进行持续启动、重新启动或停止操作。它可能导致它们暂时或永久不可用。为避免问题,您的负载均衡器应该从路由中跳过不健康的实例,因为它们...

harries ⋅ 21分钟前 ⋅ 0

手把手教你搭建vue-cli脚手架-详细步骤图文解析[vue入门]

写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目环境的时候也是...

韦姣敏 ⋅ 32分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 45分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 今天 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 今天 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 今天 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 今天 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部