解决No validator could be found for constraint ‘javax.validation.constraints.NotBlank‘ validating type

article/2025/11/11 9:30:14

文章目录

  • 1. 复现问题
  • 2. 分析问题
  • 3. 解决问题
  • 4. 重要补充
  • 5. 其他说明

1. 复现问题

今天在使用Knife4j调用后端接口,报出如下错误:

在这里插入图片描述

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id'at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getExceptionForNullValidator(ConstraintTree.java:116)at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:162)at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:54)at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:75)at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:130)at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:123)at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:555)at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:518)at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:488)at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:450)at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:400)at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:172)at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:109)at org.springframework.boot.autoconfigure.validation.ValidatorAdapter.validate(ValidatorAdapter.java:65)at org.springframework.validation.DataBinder.validate(DataBinder.java:895)at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.validateIfApplicable(AbstractMessageConverterMethodArgumentResolver.java:245)at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:137)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)......

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for 'id'

2. 分析问题

正赶上最近ChatGPT很火,于是借助ChatGPT来解决我的问题,如下所示:

在这里插入图片描述

This means that the constraint “NotBlank” is not valid for a Long type value in the field “id”. A Long type cannot support the NotBlank constraint. You should either remove the NotBlank annotation or use another type such as a String.

芭比Q的是ChatGPT是英文解释,我们不妨翻译成中文,如下所示:

这意味着约束“NotBlank”对于字段“id”中的长整型类型值无效。Long 类型不能支持 NotBlank 约束。应删除NotBlank注解或使用其他类型(如字符串)。

从中文翻译来看,由于id的类型是长整型的,而NotBlank不能修饰长整型,如下是我的代码:

/** * 自定义组件id * */
@NotBlank(message = "自定义组件id不能为空")
@ApiModelProperty(name = "id", value = "自定义组件id", required = true, example = "1")
private Long id;

但其给出两个解决方案:

  1. 删除NotBlank注解

  2. 使用其他数据类型(如字符串)

显然,这两种方式都无法解决我的问题。

因为id一般都是长整型,因而不能修改其类型,而又不能删除注解,因为必须限制id不能为空。

id不能为空,因而,我们可以考虑不能为空的注解,即@notNull

3. 解决问题

既然@NotBlank注解不能修饰长整型等,而@NotNull注解可以修饰长整型,因而可以进行如下修改:

/*** 自定义组件id* */
@NotNull(message = "自定义组件id不能为空")
@ApiModelProperty(name = "id", value = "自定义组件id", required = true, example = "1")
private Long id;

重新启动服务后调用接口,即可成功访问,如下图所示:

在这里插入图片描述

此外,@NotBlank注解除了不能修饰长整型,也不能修饰浮点型,布尔型等。

因为@NotBlank注解只能作用在String上,不能为null。而且调用trim()后,长度必须大于0 ("test") ,即必须有实际字符。

4. 重要补充

  1. @NotNull注解

    • 不能为null

    • 可以为empty ,比如""," "

  2. @NotEmpty注解

    • 不能为null

    • 而且长度必须大于0,比如" "

    • 只能使用在字符串上

5. 其他说明

  1. 如果你对Knife4j比较感兴趣,可以参考这篇博文:全网最全的Knife4j swaggerj介绍

  2. 如果你对@NotEmpty、@NotBlank等注解感兴趣,可以参考这篇博文:@NotEmpty、@NotBlank等注解的正确使用


http://chatgpt.dhexx.cn/article/bCo20y1x.shtml

相关文章

Kubernetes Admission Webhook Validating 与 mutating 实践

Kubernetes Admission Webhook Validating 与 mutating 实践 文章目录 Kubernetes Admission Webhook Validating 与 mutating 实践1. k8s 的配置2. 构建3. 部署服务4. 测试Validating webhook5. 测试 mutating webhook 1. k8s 的配置 启用 MutatingAdmissionWebhook 和 Valid…

Eclipse开发工具中validating长时间卡住不动

编辑Java代码或update 新建Maven项目后,Eclipse开发工具总会停留在validating状态,超长时间的验证代码严重影响程序员心情和工作进度,那么接下来演示如何关闭该功能: 1、点击Window->点击Preferences->点击Validation&#…

validating java_如何禁用Eclipse的Validating

使用Eclipse开发项目,在加载项目、刷新项目、修改了某个代码的时候,经常出现Eclipse正在Validating的提示。项目比较大文件(js)较多的情况下,甚至出现Validating几分钟的盛况。在这几分钟内,性能较差的电脑几乎出现鼠标停滞屏幕僵…

eclipse 的validating长时间卡住不动

方法一、直接关闭 每次maven的update project之后或者是从外部导入一个文件时,总是在validating,超长时间的验证代码,尤其是动态css和JavaScript,让程序员等待久严重影响心情和工作进度,所以将其关闭或是禁用。 如何…

关于eclipse 的validating

一、关闭 每次maven的update project之后,总是在validating,超长时间的验证代码,尤其是动态css和JavaScript,让程序员等待久严重影响心情和工作进度,所以将其关闭或是禁用。 如何关闭,操作步骤如下&#xf…

Eclipse使用时遇到一直在Validating中的解决办法

第一次从服务器检出大型web项目时出现了validating中,一直卡死不动,因此百度查找了很多说法和解决方案,先总结如下: 一、什么是Eclipse的Validating? Eclipse安装之后一般是默认设置好了validation,允许软件对当前项…

LabVIEW编程LabVIEW开发研华通用驱动XNavi 例程与相关资料

LabVIEW编程LabVIEW开发研华通用驱动XNavi 例程与相关资料 研华通用驱动XNavi,XNavi支持DAQNavi的所有产品,提供驱动,并包括多种语言的例程,当然也包括LabVIEW。联网的计算机在安装XNavi后,可直接下载安装。同时也有离…

LabVIEW串口通信

目录 1、串口写入数据 2、串口读取数据 3、清除缓存区 4、设置缓存区 5、数据超时 6、数据终止符 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。在LabVIEW中串口通信…

下载安装LabVIEW

下载安装LabVIEW 介绍下载安装流程下载安装 后续 介绍 LabVIEW 是 工程 师 用来 开发 自动 化 研究、 验证 和 生产 测试 系统 的 图形 化 编 程 环境。Labview作为图形化编程语言,图形控件拖拽式编程,显得更加直观形象,也很容易上手学习。 …

labview自制对话框

自制对话框 前言一、环境二、实现1.找图标2.新建VI,并进行以下设置3.界面布局3.1.放置一个字符串控件用于消息提示3.2.放置一个“确定”和一个“取消”按钮3.3.添加图标显示---画龙点睛3.4.适当调整布局 4.封装4.1.程序框图4.2接口 三、效果 前言 labview提供的对话…

LabView 下载与安装

labview2014是目前labview软件的最新版本,新版本增加了多个VI服务器对象,增加了多个vi脚本对象,增加了labview第三方许可和激活工具包,同时针对程序框图、编辑环境、应用程序生成器、web服务、触摸面板功能、前面板等进行了改进和优化,让用户可以更好的随时随地快速采集、…

labview 各版本及其模块工具下载汇总

labview 各版本模块工具汇总: http://download.ni.com/#evaluation/labview/ekit/other/downloader/http://download.ni.com/#evaluation/labview/ekit/other/downloader/—————————————————————————————————————————— …

VIPM安装超时无法连接到LabVIEW

首先,在LabVIEW中完成以下步骤以配置与VI服务器的连接。 单击工具选项以启动“选项”对话框。从左侧的“类别”部分中选择VI服务器 。勾选“协议”部分的TCP / IP复选框。记住端口号 。3363是默认端口号。您不需要使用默认值,但LabVIEW和VIPM必须被设置…

Labview2015安装教程

1、下载解压文件后,点进去刚刚解压的文件中,找到2015 LV这个软件,右键以管理员身份运行。 2、进去后,点击确定后就可以运行 3、选择第一个Unzip,勾选这两个选择 4、之后弹出这个确认消息,点击确定 5、点…

LabView2019的安装与卸载

LabView2019的安装 注:此版本为英文版,如需要要中文版的请参考LabView2018的安装 1. 下载网盘里面的LabView2019.zip压缩包 百度网盘链接:https://pan.baidu.com/s/1gyiFn5nOdPkLdp-1kRwwHA 提取码:labv    阿里云盘链接&…

labview 界面乱码问题解决

labview 界面乱码问题解决 **首先,打开控制面板的时钟、语言和区域,然后点击更改显示语言 ** 接着分别在格式、位置、管理这三个地方更改为中文(简体,新加坡)、新加坡、中文(简体,新加坡&#…

ubuntu下,下载及安装labview(涉及挂载.iso文件)的方法

在ubuntu环境下安装labview,本文总结了自己在安装过程中遇到的一些问题及解决方法,作为学习记录的同时,也分享一下供大家参考。主要涉及以下几个方面: 1、下载linux系统的安装包 2、.iso安装包的挂载及“只读权限”问题处理 3、…

LabView2018的安装

百度网盘链接:https://pan.baidu.com/s/1gyiFn5nOdPkLdp-1kRwwHA 提取码:labv    阿里云盘链接:https://www.aliyundrive.com/s/vBKNYBdLsXV 阿里云盘无法分享压缩包,因此改了文件格式,下载完后缀名改回.zip即可 安装…

labview插件下载

官方下载地址http://download.ni.com/#evaluation/labview/ekit/other/downloader/ labview 注册机 链接:https://pan.baidu.com/s/1VKEGFIYrLEk85FQdEe-OVQ 提取码:acsj NI LabVIEW软件可以通过多种方式与任何可编程逻辑控制器(PLC&#x…

LabVIEW下载 安装 和谐 与卸载教程

一. 简介 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而La…