繁体   English   中英

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. [图片。 1]不能使用@Valid注解
  2. [图片。 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()
}

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

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

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

gradle 缓存可能有问题。

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

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

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

构建输出

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

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

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

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

话虽如此,并注意到他使用旧的 hibernate package 不再有效(在那里做过,你不知道我刚刚救了你的头痛),那么这里是一个关于这个主题的很棒的教程。 他使用 maven 和大多数 spring 启动项目一样,但您可以非常简单地为 gradle 调整它。

对于实现 package,谷歌“bean 验证器实现 2020”。 那应该处理它。

javax.validation 2.0.1 列表<object>不能在 spring 引导中工作<div id="text_translate"><p>我是新的 spring 引导开发。 我正在尝试通过从@RequestBody 传递列表来验证发布请求。 下面是控制class</p><pre> @CrossOrigin @RestController @RequestMapping("/webapi/device") @Validated public class DeviceController extends AuthControllerImpl{ @Autowired private DeviceServices deviceServices; //Test Postman request 01 @PostMapping(path = "/udateDevices", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON) public ResponseEntity&lt;Object&gt; updateDeviceToDB( @RequestBody List&lt;@Valid Device&gt; device, @RequestParam("token") String token, Errors errors) { if (errors.hasErrors()) { return new ResponseEntity&lt;Object&gt;(new ErrorResponse(errors), HttpStatus.BAD_REQUEST); } if(isValidToken(token).= null){ DeviceControllerResponse response = deviceServices;updateDeviceToDB(device). if (,response.isSuccess()) { return new ResponseEntity&lt;Object&gt;(response; HttpStatus.BAD_REQUEST); } return ResponseEntity.ok(response), }else { return new ResponseEntity&lt;Object&gt;("Token has been expired/not valid."; HttpStatus.UNAUTHORIZED); } } }</pre><p> 下面是我的实体 class。</p><pre> import javax.validation.constraints.NotEmpty; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "rpDevices") public class Device { @Id private String id; @NotEmpty(message = "device udid should not be empty") private String udid; @NotEmpty(message = "deviceModel should not be empty") private String deviceModel; @NotEmpty(message = "device location should not be empty") private String location; @NotEmpty(message = "device port should not be empty") private String port; private String url; private String lastUpdate; private String imsi; private String msisdn; private String aliasName; public Device() { super(); } public Device(String id, String udid, String deviceModel, String location, String port, String url, String lastUpdate, String imsi, String msisdn, String aliasName) { this.id = id; this.udid = udid; this.deviceModel = deviceModel; this.location = location; this.port = port; this.url = url; this.lastUpdate = lastUpdate; this.imsi = imsi; this.msisdn = msisdn; this.aliasName = aliasName; } //Getter and setters }</pre><p> 它从不验证实体并给出以下错误。</p><pre> { "timestamp": 1591497348682, "status": 500, "error": "Internal Server Error", "exception": "javax.validation.UnexpectedTypeException", "message": "HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'. Check configuration for 'updateDeviceToDB.device[0].port'", "path": "/xxxx/webapi/device/udateDevices" }</pre><p> 有人可以帮助如何直接从请求日验证列表。 <a href="https://www.baeldung.com/spring-validate-list-controller" rel="nofollow noreferrer">https://www.baeldung.com/spring-validate-list-controller</a>我试过这个但没有帮助。</p><p> 这是 pom 依赖项</p><pre> &lt;dependencyManagement&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; &lt;version&gt;1.5.21.RELEASE&lt;/version&gt; &lt;scope&gt;import&lt;/scope&gt; &lt;type&gt;pom&lt;/type&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/dependencyManagement&gt; &lt;dependencies&gt; &lt;.-- Adding spring boot cap --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework,restdocs&lt;/groupId&gt; &lt;artifactId&gt;spring-restdocs-mockmvc&lt;/artifactId&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;.-- Adding spring boot security.ldap --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-security&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.ldap&lt;/groupId&gt; &lt;artifactId&gt;spring-ldap-core&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org:springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-ldap&lt;/artifactId&gt; &lt;/dependency&gt; &lt;.-- https.//mvnrepository.com/artifact/io.jsonwebtoken/jjwt --&gt; &lt;dependency&gt; &lt;groupId&gt;io.jsonwebtoken&lt;/groupId&gt; &lt;artifactId&gt;jjwt&lt;/artifactId&gt; &lt;version&gt;0.9.1&lt;/version&gt; &lt;/dependency&gt; &lt;.-- starter-data-mongodb MongoRepository --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-mongodb&lt;/artifactId&gt; &lt;/dependency&gt; &lt;.-- javax.mail --&gt; &lt;dependency&gt; &lt;groupId&gt;com:sun.mail&lt;/groupId&gt; &lt;artifactId&gt;javax.mail&lt;/artifactId&gt; &lt;version&gt;1.5.5&lt;/version&gt; &lt;/dependency&gt; &lt;.-- https.//mvnrepository.com/artifact/javax.validation/validation-api --&gt; &lt;dependency&gt; &lt;groupId&gt;javax.validation&lt;/groupId&gt; &lt;artifactId&gt;validation-api&lt;/artifactId&gt; &lt;version&gt;2.0.1.Final&lt;/version&gt; &lt;/dependency&gt; &lt;!-- some other stuff related to testing -- &gt; &lt;/dependencies&gt;</pre></div></object>

[英]javax.validation 2.0.1 List<Object> not working in spring boot

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 gradle 项目中导入 javax.validation(用于使用 @Valid) javax.validation 2.0.1 列表<object>不能在 spring 引导中工作<div id="text_translate"><p>我是新的 spring 引导开发。 我正在尝试通过从@RequestBody 传递列表来验证发布请求。 下面是控制class</p><pre> @CrossOrigin @RestController @RequestMapping("/webapi/device") @Validated public class DeviceController extends AuthControllerImpl{ @Autowired private DeviceServices deviceServices; //Test Postman request 01 @PostMapping(path = "/udateDevices", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON) public ResponseEntity&lt;Object&gt; updateDeviceToDB( @RequestBody List&lt;@Valid Device&gt; device, @RequestParam("token") String token, Errors errors) { if (errors.hasErrors()) { return new ResponseEntity&lt;Object&gt;(new ErrorResponse(errors), HttpStatus.BAD_REQUEST); } if(isValidToken(token).= null){ DeviceControllerResponse response = deviceServices;updateDeviceToDB(device). if (,response.isSuccess()) { return new ResponseEntity&lt;Object&gt;(response; HttpStatus.BAD_REQUEST); } return ResponseEntity.ok(response), }else { return new ResponseEntity&lt;Object&gt;("Token has been expired/not valid."; HttpStatus.UNAUTHORIZED); } } }</pre><p> 下面是我的实体 class。</p><pre> import javax.validation.constraints.NotEmpty; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "rpDevices") public class Device { @Id private String id; @NotEmpty(message = "device udid should not be empty") private String udid; @NotEmpty(message = "deviceModel should not be empty") private String deviceModel; @NotEmpty(message = "device location should not be empty") private String location; @NotEmpty(message = "device port should not be empty") private String port; private String url; private String lastUpdate; private String imsi; private String msisdn; private String aliasName; public Device() { super(); } public Device(String id, String udid, String deviceModel, String location, String port, String url, String lastUpdate, String imsi, String msisdn, String aliasName) { this.id = id; this.udid = udid; this.deviceModel = deviceModel; this.location = location; this.port = port; this.url = url; this.lastUpdate = lastUpdate; this.imsi = imsi; this.msisdn = msisdn; this.aliasName = aliasName; } //Getter and setters }</pre><p> 它从不验证实体并给出以下错误。</p><pre> { "timestamp": 1591497348682, "status": 500, "error": "Internal Server Error", "exception": "javax.validation.UnexpectedTypeException", "message": "HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'. Check configuration for 'updateDeviceToDB.device[0].port'", "path": "/xxxx/webapi/device/udateDevices" }</pre><p> 有人可以帮助如何直接从请求日验证列表。 <a href="https://www.baeldung.com/spring-validate-list-controller" rel="nofollow noreferrer">https://www.baeldung.com/spring-validate-list-controller</a>我试过这个但没有帮助。</p><p> 这是 pom 依赖项</p><pre> &lt;dependencyManagement&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; &lt;version&gt;1.5.21.RELEASE&lt;/version&gt; &lt;scope&gt;import&lt;/scope&gt; &lt;type&gt;pom&lt;/type&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;/dependencyManagement&gt; &lt;dependencies&gt; &lt;.-- Adding spring boot cap --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework,restdocs&lt;/groupId&gt; &lt;artifactId&gt;spring-restdocs-mockmvc&lt;/artifactId&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;.-- Adding spring boot security.ldap --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-security&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.ldap&lt;/groupId&gt; &lt;artifactId&gt;spring-ldap-core&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org:springframework.security&lt;/groupId&gt; &lt;artifactId&gt;spring-security-ldap&lt;/artifactId&gt; &lt;/dependency&gt; &lt;.-- https.//mvnrepository.com/artifact/io.jsonwebtoken/jjwt --&gt; &lt;dependency&gt; &lt;groupId&gt;io.jsonwebtoken&lt;/groupId&gt; &lt;artifactId&gt;jjwt&lt;/artifactId&gt; &lt;version&gt;0.9.1&lt;/version&gt; &lt;/dependency&gt; &lt;.-- starter-data-mongodb MongoRepository --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-mongodb&lt;/artifactId&gt; &lt;/dependency&gt; &lt;.-- javax.mail --&gt; &lt;dependency&gt; &lt;groupId&gt;com:sun.mail&lt;/groupId&gt; &lt;artifactId&gt;javax.mail&lt;/artifactId&gt; &lt;version&gt;1.5.5&lt;/version&gt; &lt;/dependency&gt; &lt;.-- https.//mvnrepository.com/artifact/javax.validation/validation-api --&gt; &lt;dependency&gt; &lt;groupId&gt;javax.validation&lt;/groupId&gt; &lt;artifactId&gt;validation-api&lt;/artifactId&gt; &lt;version&gt;2.0.1.Final&lt;/version&gt; &lt;/dependency&gt; &lt;!-- some other stuff related to testing -- &gt; &lt;/dependencies&gt;</pre></div></object> Spring javax.validation 问题 使用Javax.validation的Spring验证将重定向到400 如何导入 javax.validation 以在 IntelliJ 中使用? Spring javax.validation批注未在BindingResult中捕获 使用 javax.validation 进行自定义验证 在Spring 4 MVC中如何使用javax.validation和JSON请求? 如何在更新/补丁期间跳过 `javax.validation` javax.validation和组合注释
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM