Java 如何在Spring Boot中使用@NotEmpty约束来验证HTTP请求主体?
我有一个包含HTTP端点的RestController来创建新用户Java 如何在Spring Boot中使用@NotEmpty约束来验证HTTP请求主体?,java,spring-boot,rest,validation,spring-mvc,Java,Spring Boot,Rest,Validation,Spring Mvc,我有一个包含HTTP端点的RestController来创建新用户 @RestController public class UserController { @PostMapping("/user") public CompletableFuture<ResponseEntity<UserResponse>> createUser( @Valid @RequestBody UserRequest userRequest) {
@RestController
public class UserController {
@PostMapping("/user")
public CompletableFuture<ResponseEntity<UserResponse>> createUser(
@Valid @RequestBody UserRequest userRequest) {
return CompletableFuture.completedFuture(
ResponseEntity.status(HttpStatus.ACCEPTED).body(userService.createUser(userRequest)));
}
}
现在,每次使用有效负载(例如,{“name”:“John”}
)调用POST/user端点时,我都会得到以下错误:
HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'. Check configuration for 'name'"
换句话说,不管“name”属性是否为空,都会引发异常
但是,当我改用@NotNull
约束时,只有在没有name属性或{“name”:null}
的情况下才会抛出异常,这与预期的一样
我是否误用了@NotEmpty约束?对于验证字符串的变量,您应该使用
@NotBlank
此约束检查字符串变量的null和空白值(例如“或”为空)或者@NotNull
,如果您想检查唯一可为空的值
@NotEmpty
用于集合的类型检查
查看此项了解更多信息:Maven依赖项(在pom.xml中)-
请参阅:从错误消息判断,问题不在于注释的使用,而是运行类型依赖性问题。您在类路径上有其他版本的hibernate validator库吗?@jtsnr事实上,我在类路径上定义了hibernate validator v6.0.16.Final。这会以任何方式影响该行为吗?@NotEmpty示例在您提供的baeldung链接中使用了一个字符串,这表明验证是有效的!这似乎是一个有用的构建时检查。我将把它添加到annotationProcessorPaths选项中。谢谢
HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'. Check configuration for 'name'"
<!-- Java bean validation API - Spec -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- Hibernate validator - Bean validation API Implementation -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.11.Final</version>
</dependency>
<!-- Verify validation annotations usage at compile time -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.0.11.Final</version>
</dependency>
import javax.validation.constraints.NotEmpty;
@NotEmpty(message = "Name cannot be empty")
private String name;