java - 如何使用 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
,因为我认为这不是必需的)。任何帮助,将不胜感激!
解决方案
正如@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-11
to更新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
注:|
表示子依赖(依赖的依赖或传递依赖的依赖)。
推荐阅读
- python - Django url No Activity 匹配给定的查询?
- c++ - ROS函数的参数
- java - 由字符串的 concat 返回的 Javadoc
- emacs - Emacs 树编辑
- kubernetes - 删除带有 Chart 名称但不带有 Release 名称的 helm
- reactjs - ReactJS 中的引导下拉菜单,一次只打开一个
- java - 如何在 IntelliJ Idea 中安全地移动包?
- django - Django v2+ regex for custom path converter to handle csv
- docker - 如何让 nginx-proxy 为每个 Docker 容器生成一个自签名证书?
- excel - 在 Excel 中保留来自 Power BI 服务的筛选器