java - HV000030:找不到约束“javax.validation.constraints.Size”验证类型“java.util.Optional”的验证器'
问题描述
大家好,我正在尝试对 YAML 进行验证
- name: campo
in: query
schema:
type: string
pattern: '[S|N]' #pattern
maxLength: 1
使用 maven spring boot 和委托。在 RestController 上,我添加了注释@Validated
,我能够验证 required=true 字段,但如果字段不是必需的,根据架构设计,参数将为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 上编写所有验证代码。
编辑:验证@Size 和其他人是从带有开放 api 版本 3.0.3 的 YAML 生成的
解决方案
你应该写:(Optional<@Size String>
这将检查可选内部字符串的大小)而不是@Size Optional<String>
(应该检查可选的大小,这是没有意义的)。
请参阅休眠验证器:使用java.util.Optional
:
package org.hibernate.validator.referenceguide.chapter02.containerelement.optional;
public class Car {
private Optional<@MinTowingCapacity(1000) Integer> towingCapacity = Optional.empty();
//...
}
推荐阅读
- c# - 如何移动其他应用程序但又不将它们重叠在一起
- java - Java - 将 JSON 对象中的键提取到值为 true 的字符串中
- php - PHPUnit 处理测试中没有消息的异常
- css - 以多种尺寸显示相同的组件
- wordpress - 为 wordpress 图库功能添加选项
- php - laravel和flutter之间的加密
- perl - 在 shell 脚本中使用 SSH 命令时出错
- node.js - Firebase - 功能没有正确部署 - 没有这样的文件或目录,打开'/workspace/node_modules/shared/package.json
- nginx - nginx反向代理https到http问题
- javascript - 如何从本地服务器上的共享文件加载图像?