使用Hibernate Validator Provider进行RESTEasy Bean验证

Bean验证API(JSR-303)为基于注解的Bean验证定义了元数据模型和API。该功能是通过resteasy-hibernatevalidator-provider组件实现的。为了集成,我们需要将resteasy-hibernatevalidator-provider.jarhibernate-validator.jar文件添加到类路径。

如果您使用的是maven,则只需添加以下依赖项。随身更改RESTEasy的版本号。

<dependency>
   <groupId>org.jboss.resteasy</groupId>
   <artifactId>resteasy-hibernatevalidator-provider</artifactId>
   <version>2.3.1.GA</version>
</dependency>

步骤1)在API参数中添加验证特定的注解

您可以使用各种注解来验证请求参数和表单输入。例如,我使用了@NotNull@Size注解。在链接中了解所有可用的注解。别忘了在方法API上添加@ValidateRequest注解。@ValidateRequest启用对其应用方法的验证。

package com.how2codex.rest;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.spi.validation.ValidateRequest;

@Path("/rest")
public class UserService 
{
	@Path("/users")
	@POST
	@ValidateRequest
	public Response addUser
	(
			@NotNull
			@Size(min=1,max=50) 
			@FormParam("firstName") String firstName  , 
			
			@Size(max=50)
			@FormParam("lastName") String lastName
	)
	{
		return Response.ok().entity("User "" + firstName + " " + lastName + "" added through JAX-RS JavaScript API").build();
	}
}

步骤2)添加验证异常处理程序

好吧,这很重要,因为 Hibernate 验证器插件没有任何用于异常处理的功能,因此您需要嵌入。RESTEasy中的异常处理程序通过ExceptionMapper类使用。

package com.how2codex.exception;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.hibernate.validator.method.MethodConstraintViolationException;

@Provider
public class ValidationExceptionHandler implements ExceptionMapper<MethodConstraintViolationException> 
{
	@Override
	public Response toResponse(MethodConstraintViolationException exception) 
	{
		return Response.status(Status.BAD_REQUEST).entity("Fill all fields").build();
	}
}

步骤3)构建客户端代码并测试应用程序

我写了一个普通的HTML表单,它将使用表单提交为firstName和lastName参数发送两个参数。参数验证自动执行,如果验证失败,则调用异常处理程序以返回正确的状态代码。

<html>
	<body>
		<h1>RESTEasy Hibernate Validator Plugin</h1>
		<div id="error"></div>
		<form method="post" action="./rest/users">
			<p>First Name : <input type="text" name="firstName" id="firstName"/></p>
			<p>LastName : <input type="text" name="lastName" id="lastName"/></p>
			<input type="submit" value="Add User" />
		</form>
		Demo by : <b>//how2codex.com</b>
	</body>
</html>

您可以在浏览器窗口中测试上述应用程序,也可以使用RESTClient firefox插件等REST测试工具。

使用 Hibernate 验证器进行RESTEasy Bean验证
使用 Hibernate 验证器进行RESTEasy Bean验证

要下载此演示的源代码,请点击以下链接。

源代码下载

saigon has written 1445 articles

Leave a Reply