如何使用 REST Easy 和 Vertx 启用 @Valid 注解

How to enable @Valid annotation with REST Easy and Vertx

我正在尝试让 @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;
  }
  
}

我的期望是,当我用一些不符合验证标准的 JSON 调用 someController 时(即 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

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

最后,我尝试按照 here 列出的说明进行操作,但无济于事(希望添加 validation.xml,因为我认为这不是必需的)。任何帮助将不胜感激!

正如@JamesR.Perkins 所建议的,这是由于使用了较旧版本的验证提供程序 resteasy-validator-providerresteasy-vertx 相比。此外,我使用的是旧的工件 ID。

为了让这个工作正常,我从 build.gradle 中删除了 org.jboss.resteasy:resteasy-validator-provider-11:3.0.11.Final 并添加了 org.jboss.resteasy:resteasy-validator-provider:4.5.3.Final。请注意,工件 ID 已从 resteasy-validator-provider-11 更新为 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

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