首页 > 解决方案 > 如何使用 @NotEmpty 约束在 Spring Boot 中验证 HTTP 请求正文?

问题描述

我有一个包含 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)));
  }
}

我的 UserRequest 模型如下:

@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(NON_NULL)
@NoArgsConstructor
public class UserRequest {

  // @NotNull
  @NotEmpty private String name;
}

现在,每次我使用有效负载(例如,{ "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 约束?

标签: javaspring-bootrestvalidationspring-mvc

解决方案


对于验证字符串的变量,您应该使用@NotBlank此约束检查字符串变量的空值和空白值(例如“”或“”),或者@NotNull如果您想检查唯一可以为空的值

@NotEmpty用于 Collection 的类型检查。

检查此以获取更多信息:https ://www.baeldung.com/java-bean-validation-not-null-empty-blank


推荐阅读