HV000030:找不到约束“javax.validation.constraints.Size”验证类型“java.util.Optional<java.lang.String>”的验证器

Lui*_*uis 4 java validation constraints option-type

大家好,我正在尝试对 YAML 进行验证

\n
- name: campo\n        in: query\n        schema:\n          type: string\n          pattern: '[S|N]' #pattern\n          maxLength: 1\n
Run Code Online (Sandbox Code Playgroud)\n

使用 Maven Spring Boot 和 delegate。在 RestController 上,我添加了注释@Validated,并且能够验证 required=true 字段,但如果字段不是必需的,根据架构设计,参数将为Optional<String>。为此java.util.Optional,尝试测试和验证,抛出标题错误:

\n
{\n  "timestamp": "2020-10-21T07:50:18.651+0000",\n  "status": 500,\n  "error": "Internal Server Error",\n  "message": "HV000030: No validator could be found for constraint 'javax.validation.constraints.Size' validating type 'java.util.Optional<java.lang.String>'. Check configuration for 'metodo.campo'",\n  "path": "/%7BbasePath%7D/microservicio/metodo"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xc2\xbf有办法解决此问题以Optional<String>正确处理此验证吗?如果可以在 YAML + 验证(@Valid 和 @Validated)上完成,我们不想在 Java 上编写所有验证代码。

\n

编辑:验证 @Size 和其他内容是使用开放 api 版本 3.0.3 从 YAML 生成的

\n

Eti*_*ret 5

你应该写:(Optional<@Size String>这将检查可选中字符串的大小)而不是@Size Optional<String>(它应该检查可选的大小,这是没有意义的)。

请参阅Hibernate 验证器:使用java.util.Optional



package org.hibernate.validator.referenceguide.chapter02.containerelement.optional;

public class Car {

    private Optional<@MinTowingCapacity(1000) Integer> towingCapacity = Optional.empty();

    //...

}
Run Code Online (Sandbox Code Playgroud)