有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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和其他验证


共 (2) 个答案

  1. # 1 楼答案

    从2019年8月起,新版Jakarta Bean Validation 2.0新支持Optional验证。您可以在他们的变更日志摘要2. What’s new中找到这些信息:

    Support for java.util.Optional

    截至今年9月,唯一经过认证的实施是Hibernate Validator ^{}

    考虑升级,你必须省略大小验证并手动执行。

  2. # 2 楼答案

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

    Hibernate Validator: With ^{}

    
    
    package org.hibernate.validator.referenceguide.chapter02.containerelement.optional;
    
    public class Car {
    
        private Optional<@MinTowingCapacity(1000) Integer> towingCapacity = Optional.empty();
    
        //...
    
    }