RestEasy 3.x 系列之四:使用Hibernate_Validator进行数据校验
使用Hibernate_Validator进行数据校验,好处不言而喻:规范统一,低耦合度。
1、pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency> <dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-validator-provider-11</artifactId>
<version>3.0.9.Final</version>
</dependency>
2、添加约束注解,目标元素可以是字段(变量)、属性(getter方法)或者类型等
在需要进行校验的变量或者属性(domain里面的)添加约束注解
UserService.java
@Path("UserService")
public class UserService {
@Size(min = 2, max = 4)
@PathParam("s")
String s;
@POST
@Path("{s}/user")
@Produces("application/json;charset=UTF-8")
public String adduser(@Valid User user) {
//System.out.print(VALIDATION_HEADER);
return user.getEmail();
}
}
User.java
@XmlRootElement(name = "User")
public class User { @NotNull
@Pattern(regexp="[0-9]+",message="id必须为数字")
@Size(min = 2, max = 4)
private String name; private String pwd; @Email
private String email;
getset略
}
3、捕获检验异常和message并输出
resteasy框架为api的异常处理,提供了一个统一的接口,ExceptionMapper<Exception>,我们可以定义一个handler来实现这个接口,就可以捕获resteasy api的异常。如下面的代码:
ValidationExceptionHandlerREST.java
@Provider
public class ValidationExceptionHandlerREST implements ExceptionMapper<ResteasyViolationException >
{ @Override
public Response toResponse(ResteasyViolationException exception)
{
//获取校验失败的反馈信息
Map<String, String> violations = new HashMap<String, String>(); for (ResteasyConstraintViolation violation : exception.getViolations()) {
violations.put(violation.getPath(), violation.getMessage());
}
System.out.print("Violation error");
return Response.status(Status.BAD_REQUEST).entity(violations).build();
}
}
另外我们需要使用此handler,所以我们在web.xml中启用它。如下面的配置:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>cn.itcast.ValidatorException.ValidationExceptionHandlerREST</param-value>
</context-param>
4、最后
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>cn.itcast.service.test,cn.itcast.service.UserService</param-value>
</context-param>
5、测试
源码下载
RestEasy_03_Hibernate_Validator.rar
RestEasy 3.x 系列之四:使用Hibernate_Validator进行数据校验的更多相关文章
- JVM系列之四:运行时数据区
1. JVM架构图 Java虚拟机主要分为五大模块:类装载器子系统.运行时数据区.执行引擎.本地方法接口和垃圾收集模块. 2. JDK1.7内存模型-运行时数据区域 根据<Java 虚拟机规范( ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程
原文:Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列之四 SQL Data Compare ...
- .NET 4 并行(多核)编程系列之四 Task的休眠
原文:.NET 4 并行(多核)编程系列之四 Task的休眠 .NET 4 并行(多核)编程系列之四 Task的休眠 前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Tas ...
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
- C++ 提取网页内容系列之四正则
标 题: C++ 提取网页内容系列之四作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4173833.html 欢迎转帖 请保持文本完整并注明出处 将网页内 ...
- TCP/IP网络编程系列之四(初级)
TCP/IP网络编程系列之四-基于TCP的服务端/客户端 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流的 ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
随机推荐
- 转:AJAX中xhr对象详解
XJAX ,并不是一种新技术的诞生.它实际上代表的是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用. 它包括: 使用XHTML和CSS标准化呈现: 使用DOM实现动态显示和交互: 使用XML ...
- 对Spring AOP的理解
AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善. AOP在spring ...
- 从C++转向Java的第一课
序:计算机语言的学习,最快捷的方法是从一种语言映射到另一种语言.Java和C++作为最通用的面相对象高级语言,不论从语法或者编程上都极具相似性和可效仿行,这里的可效仿包括——语法理解可效仿和编程规范可 ...
- entity framework 新手入门篇(1.5)-lambda表达式与linq
在建立好了EF模型之后,先不着急使用它,在使用它之前,你还需要了解两个相关的技术,lambda表达式与linq. 作为微软C#语言中重要的语法糖-lambda表达式与LINQ,本质都是一个方法,以la ...
- SRS文档
1什么是用例? 在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification).传统的软件需求规约 ...
- C#中datatable导出excel(三种方法)
方法一:(拷贝直接可以使用,适合大批量资料, 上万笔) Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Offi ...
- Frame动画实战
Android动画分为Tween动画和Frame动画,Tween动画主要包括图片的放大缩小.旋转.透明度变化.移动等等操作:Frame动画则简单得多了,就是把一张张的图片连续播放产生动画效果. 本节主 ...
- linux中解压缩并安装.tar.gz后缀的文件
1.解压缩: Linux下以tar.gz为扩展名的软件包,是用tar程序打包并用gzip程序压缩的软件包.要安装这种软件包,需要先对软件包进行解压缩,使用“tar -zxfv filename.tar ...
- Linux下查看tomcat连接数 .
netstat -na | grep ESTAB | grep 80 | wc -l 80是端口号
- 长沙市轨道交通工程BIM应用招标公告
摘要: 长沙市轨道交通集团有限公司对其长沙市轨道交通3号线一期工程建筑信息模型(BIM)技术应用项目进行国内公开招标 长沙市轨道交通集团有限公司对其长沙市轨道交通3号线一期工程建筑信息模型(BIM)技 ...