原文: https://howtodoinjava.com/resteasy/resteasy-bean-validation-using-hibernate-validator-provider/

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

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

  1. <dependency>
  2. <groupId>org.jboss.resteasy</groupId>
  3. <artifactId>resteasy-hibernatevalidator-provider</artifactId>
  4. <version>2.3.1.GA</version>
  5. </dependency>

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

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

  1. package com.howtodoinjava.rest;
  2. import javax.validation.constraints.NotNull;
  3. import javax.validation.constraints.Size;
  4. import javax.ws.rs.FormParam;
  5. import javax.ws.rs.POST;
  6. import javax.ws.rs.Path;
  7. import javax.ws.rs.core.Response;
  8. import org.jboss.resteasy.spi.validation.ValidateRequest;
  9. @Path("/rest")
  10. public class UserService
  11. {
  12. @Path("/users")
  13. @POST
  14. @ValidateRequest
  15. public Response addUser
  16. (
  17. @NotNull
  18. @Size(min=1,max=50)
  19. @FormParam("firstName") String firstName ,
  20. @Size(max=50)
  21. @FormParam("lastName") String lastName
  22. )
  23. {
  24. return Response.ok().entity("User "" + firstName + " " + lastName + "" added through JAX-RS JavaScript API").build();
  25. }
  26. }

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

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

  1. package com.howtodoinjava.exception;
  2. import javax.ws.rs.core.Response;
  3. import javax.ws.rs.core.Response.Status;
  4. import javax.ws.rs.ext.ExceptionMapper;
  5. import javax.ws.rs.ext.Provider;
  6. import org.hibernate.validator.method.MethodConstraintViolationException;
  7. @Provider
  8. public class ValidationExceptionHandler implements ExceptionMapper<MethodConstraintViolationException>
  9. {
  10. @Override
  11. public Response toResponse(MethodConstraintViolationException exception)
  12. {
  13. return Response.status(Status.BAD_REQUEST).entity("Fill all fields").build();
  14. }
  15. }

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

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

  1. <html>
  2. <body>
  3. <h1>RESTEasy Hibernate Validator Plugin</h1>
  4. <div id="error"></div>
  5. <form method="post" action="./rest/users">
  6. <p>First Name : <input type="text" name="firstName" id="firstName"/></p>
  7. <p>LastName : <input type="text" name="lastName" id="lastName"/></p>
  8. <input type="submit" value="Add User" />
  9. </form>
  10. Demo by : <b>//howtodoinjava.com</b>
  11. </body>
  12. </html>

您可以在浏览器窗口中测试上述应用,也可以使用一些 REST 测试工具,例如 RESTClient firefox 插件

使用 Hibernate 验证器供应器进行 RESTEasy Bean 验证 - 图1

使用 Hibernate 验证器的 RESTEasy bean 验证

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

祝您学习愉快!