Spring Boot保存List<String>时报No validator could be found错误如何解决
错误原因
@NotBlank注解的适用范围仅为CharSequence类型(如String),作用是校验字符串不能为null、不能是空串、不能全为空白字符。你将该注解标注在List<String>类型的字段上,Bean Validation规范未提供对应集合类型的@NotBlank校验器,因此在校验参数阶段直接抛出找不到对应校验器的错误,该报错和你后续修改的保存逻辑无关,还没走到业务保存层校验就已经失败。
解决方案
根据你的校验需求选择对应方案即可:
- 仅需校验services集合不能为null、且不能是空集合
将实体类字段上的@NotBlank替换为@NotEmpty(Spring Boot 2.x用javax.validation.constraints.NotEmpty,3.x及以上替换为jakarta.validation.constraints.NotEmpty),修改后代码如下:
@Column(name="services") @ElementCollection @NotEmpty private List<String> services = new ArrayList<>();
- 需同时校验集合非空、且集合内每个字符串元素都不能为空白
搭配泛型校验实现,代码如下:
@Column(name="services") @ElementCollection @NotEmpty private List<@NotBlank String> services = new ArrayList<>();
修改完成后无需调整现有保存逻辑,重新启动项目即可正常请求。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

