【问题标题】:Why is Java saying I can't use @NotBlank with a string为什么Java说我不能将@NotBlank与字符串一起使用
【发布时间】:2017-12-01 22:22:04
【问题描述】:

我有以下代码

import javax.validation.constraints.NotBlank;
...
@NotBlank(message="Not Blank")
private String thing;

当我尝试跑步时,我得到了

找不到约束“javax.validation.constraints.NotBlank”验证类型“java.lang.String”的验证器

如何在字符串中使用 NotBlank 注释?

Java 8

【问题讨论】:

  • 是Spring注解吗? import org.hibernate.validator.constraints.NotBlank;我只能看到javax...除了NotBlank之外还有NotNull
  • 我的猜测是您使用的是旧版本的东西(可能是您的验证器?),它还不知道标准化注释。发布您的 POM/Gradle 文件。
  • 此验证是 JEE 的一部分,而不是 JSE。你在用 EE 吗?
  • 据我所知容器是SpringBoot和Tomcat

标签: java


【解决方案1】:

您应用的javax.validation.constraints.NotBlank 注释是Bean Validation API v2 的一部分。

最可能的情况是:

  • 您将 bean 验证 API v2 作为项目的依赖项
  • 实施框架/库仅支持 v1.0/v1.1 API。

请查看此帖子以获取有关现有实现的信息:Is there JSR-303 implementation available?

我建议您在类路径上检查 bean 验证 API v2(它也可以称为 JSR-380)。我知道的这个 API 的唯一实现是 Hibernate Validator v6.0。确保 v2 实现不会被类路径上的某些 v1.x 实现隐藏。

【讨论】:

  • 当然,我会尝试添加一些我认为可能很重要的依赖项。哪些库会将 API v1 作为依赖项?弹簧等
【解决方案2】:

我遇到了这个问题并解决了。因为验证版本冲突, 在我的项目中,两次validate都引入了错误。检查jar包,然后remove,就成功了。

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.1.0.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2020-08-26
    • 2013-07-02
    • 2015-11-08
    • 2013-08-24
    • 2014-06-21
    • 2023-03-13
    相关资源
    最近更新 更多