java - 如何使用 @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 约束?
解决方案
对于验证字符串的变量,您应该使用@NotBlank
此约束检查字符串变量的空值和空白值(例如“”或“”),或者@NotNull
如果您想检查唯一可以为空的值
@NotEmpty
用于 Collection 的类型检查。
检查此以获取更多信息:https ://www.baeldung.com/java-bean-validation-not-null-empty-blank
推荐阅读
- javascript - 在 vuejs 中使用条件内部过滤器()?
- html - 在按钮文本上方显示字体真棒图标作为链接
- java - 使用 Gradle 将环境变量添加到 Cucumber 任务
- python-3.x - Python - 有没有办法简化网页抓取代码?
- python - 如何从整数中取回数据。我的 model.predict() 不工作
- javascript - Google Maps API - 如何消除位置峰值
- angular - ag-Grid:获取鼠标所在行的索引
- javascript - 如何将数据从 laravel 控制器发送到 vuejs
- angular - ngx-leaflet / GeoJson / Country Border
- java - 我是 android 领域的新手,并且遇到插入 android 应用程序的问题?