Java 如何在Spring Boot中使用@NotEmpty约束来验证HTTP请求主体?

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) {

我有一个包含HTTP端点的RestController来创建新用户

@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;