VSCode、Gradle、Spring 启动,无法导入 javax.validation

VSCode, Gradle, Spring Boot, Can't import javax.validation

全部。
我想在 spring boot(2.3.0) 框架中使用 @Valid 和 @NotEmpty。
但是我无法导入 javax.validation 所以我不能。
这是我当前遇到的屏幕和 build.gradle 文件:

  1. 不能使用@Valid注解
  2. 不能使用@NotEmpty 注解

<文件:build.gradle>

plugins {
    id 'org.springframework.boot' version '2.3.0.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'kr.co.fastcampus'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    //  Spring Boot
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-validation'

    //  Database
    implementation 'com.h2database:h2'

    compileOnly 'org.projectlombok:lombok'

    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

可能是 gradle 缓存有问题。

确保您在 gradle-wrapper.properties 中使用正确的 gradle 版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-bin.zip

然后重建。检查您在构建过程中是否遇到任何错误。这里的一切都应该是绿色的:

我使用了相同的 build.gradle 文件(您提供的),@Valid 和 @NonEmpty 注释都工作正常。

我带着同样的问题来到这里,但我的问题是我忘记将这一行添加到 build.gradle。

implementation('org.springframework.boot:spring-boot-starter-validation')

我知道这不是你的问题,但只是将此发布在这里,供与我一样面临相同问题并偶然发现这个问题的其他人使用。

要使用 bean 验证 (Javax.validation),在大多数情况下您还需要一个实现。你可以把 javax.validation 包想象成一个接口,它只包含验证 api,但它们必须通过另一个包来实现。

这曾经是 hibernate.validator,但现在已弃用。

说到弃用,整个 javax 库模块在最新版本中已弃用。这包括 json 库、jax-rs 和 jax-ws 库以及许多其他库。

话虽如此,并注意到他使用了不再有效的旧休眠包(在那里做过,你不知道我刚刚救了你的头痛),然后 here 很棒关于这个主题的教程。他像大多数 spring 引导项目一样使用 maven,但您可以非常简单地针对 gradle 调整它。

对于实施包,google“bean 验证器实施 2020”。那应该可以解决。