首页 > 解决方案 > 如何使用 REST Easy 和 Vertx 启用 @Valid 注释

问题描述

我试图让@Valid注释在使用 RESTEasy 和 Vert.x 的项目中工作。

我有一个 API 控制器设置,其方法签名public Future<SomeResponseDto> someController(@Valid SomeRequestDto dto)如下SomeRequestDto所示:

@Value
public class SomeRequestDto {

  @NotEmpty
  String someField;
  
  @JsonCreator
  public SomeRequestDto(@JsonProperty("some_field") String someField) {
    this.someField = someField;
  }
  
}

我的期望是,当我someController使用一些不符合验证条件的 JSON(即)调用时,someField""返回一个错误并且someController不执行主体。情况并非如此,正在执行的someController 主体

有趣的是,如果我在正文中进行手动验证,someController我会得到一个Set包含我期望的验证错误。手动验证使用以下代码:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

final var result = validator.validate(dto); // This holds the expected constraint validation error

在依赖方面,我的项目直接依赖以下(列在 中build.gradle):

org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final
| org.hibernate:hibernate-validation:5.0.1.Final // Pulled in via the above

并且依赖于以下传递(通过依赖项的依赖):

org.jboss.resteasy:resteasy-vertx:4.5.3.Final
| org.jboss.resteasy:resteasy-client:4.5.3.Final // Pulled in as a dependency of the above transient depdency

注:|表示子依赖(依赖的依赖或传递依赖的依赖)。

最后,我尝试按照此处列出的说明无济于事(期待添加validation.xml,因为我认为这不是必需的)。任何帮助,将不胜感激!

标签: javavalidationresteasyvert.xhibernate-validator

解决方案


正如@JamesR.Perkins 建议的那样,这是由于使用了旧版本的验证提供程序,resteasy-validator-provider而不是resteasy-vertx. 此外,我使用的是旧的工件 ID。

为了让这个工作,我org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final从我的删除build.gradle并添加了org.jboss.resteasy:resteasy-validator-provider:4.5.3.Final. 请注意,工件 ID 已从resteasy-validator-provider-11to更新resteasy-validator-provider,我选择4.5.3.Final了验证器的版本,因为它与resteasy-vertx我使用的版本匹配。

为清楚起见,我的项目现在直接依赖于以下内容(列在 中build.gradle):

org.jboss.resteasy:resteasy-validator-provider:4.5.3.Final
| org.hibernate:hibernate-validation:6.2.0.Final // Pulled in via the above

并且依赖于以下传递(通过依赖项的依赖):

org.jboss.resteasy:resteasy-vertx:4.5.3.Final
| org.jboss.resteasy:resteasy-client:4.5.3.Final // Pulled in as a dependency of the above transient depdency

注:|表示子依赖(依赖的依赖或传递依赖的依赖)。


推荐阅读