HV000030:找不到约束“javax”的验证器。验证。限制。大小为“验证类型”的java。util。可选<java。lang.String>'
大家好,我正在尝试验证YAML
- name: campo
in: query
schema:
type: string
pattern: '[S|N]' #pattern
maxLength: 1
使用maven spring引导和委托。在RestController上,我添加了注释@Validated
,并且我能够验证required=true字段,但是如果字段不是required,根据架构设计,参数将是Optional<String>
。对于此java.util.Optional
,尝试测试和验证时抛出标题错误:
{
"timestamp": "2020-10-21T07:50:18.651+0000",
"status": 500,
"error": "Internal Server Error",
"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'",
"path": "/%7BbasePath%7D/microservicio/metodo"
}
?要解决此问题,是否正确处理此Optional<String>
验证?如果可以在YAML+验证(@Valid和@Validated)上完成验证,我们不想在Java上编写所有验证代码
编辑:使用OpenAPI版本3.0.3从YAML生成@Size和其他验证
# 1 楼答案
从2019年8月起,新版Jakarta Bean Validation 2.0新支持
Optional
验证。您可以在他们的变更日志摘要2. What’s new中找到这些信息:截至今年9月,唯一经过认证的实施是Hibernate Validator ^{}
考虑升级,你必须省略大小验证并手动执行。
# 2 楼答案
您应该写:
Optional<@Size String>
(它将检查可选项中字符串的大小),而不是@Size Optional<String>
(它应该检查可选项的大小,这是没有意义的)见Hibernate Validator: With ^{} :