多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 使用 Hibernate 验证器供应器进行 RESTEasy Bean 验证 > 原文: [https://howtodoinjava.com/resteasy/resteasy-bean-validation-using-hibernate-validator-provider/](https://howtodoinjava.com/resteasy/resteasy-bean-validation-using-hibernate-validator-provider/) Bean 验证 API([**JSR-303**](https://jcp.org/en/jsr/detail?id=303 "jsr-303"))基于注解定义了用于 bean 验证的元数据模型和 API。 该功能是通过`resteasy-hibernatevalidator-provider`组件实现的。 为了集成,我们需要将`resteasy-hibernatevalidator-provider.jar`和`hibernate-validator.jar`文件添加到类路径。 如果您使用的是 maven,则只需添加以下依赖项。 随身更改 RESTEasy 的版本号。 ```java <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-hibernatevalidator-provider</artifactId> <version>2.3.1.GA</version> </dependency> ``` ## 步骤 1)在 API 参数中添加特定于验证的注解 您可以使用各种注解来验证请求参数和表单输入。 例如,我使用了[**`@NotNull`**](https://docs.oracle.com/javaee/6/api/javax/validation/constraints/NotNull.html "NotNull annotation")和[**`@Size`**](https://docs.oracle.com/javaee/6/api/javax/validation/constraints/Size.html "Size annotation")注解。 阅读链接中的所有[**可用注解**](https://docs.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html "all validation annotations")。 别忘了在方法 API 上添加`@ValidateRequest`注解。`@ValidateRequest`启用对其应用方法的验证。 ```java package com.howtodoinjava.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)添加验证异常处理器 好吧,这很重要,因为 **Hiberate 验证器插件没有任何用于异常处理的功能,因此您需要嵌入自己的**。 RESTEasy 中的异常处理器通过`ExceptionMapper`类使用。 ```java package com.howtodoinjava.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`参数发送两个参数。 参数验证自动执行,如果验证失败,则调用异常处理器以返回正确的状态代码。 ```java <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>//howtodoinjava.com</b> </body> </html> ``` 您可以在浏览器窗口中测试上述应用,也可以使用一些 REST 测试工具,例如 [**RESTClient firefox 插件**](https://addons.mozilla.org/en-US/firefox/addon/restclient/ "restclient")。 ![RESTEasy bean validation using hibernate validator](https://img.kancloud.cn/94/50/94509056fc579422aa73f67baeb49457_944x374.png) 使用 Hibernate 验证器的 RESTEasy bean 验证 要下载此演示的源代码,请点击以下链接。 **祝您学习愉快!**