java 实体字段校验@NotNull @NotEmpty @NotBlank
注意在使用 @NotBlank 等注解时,一定要和 @valid 一起使用,否则 @NotBlank 不起作用。
1.@NotNull
不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制.
一个 BigDecimal 的字段使用字段校验标签应该为 @NotNull。
在使用 @Range 一般用在 Integer 类型上可对字段数值进行大小范围的控制。
2.@NotEmpty
不能为 null,且长度必须大于 0,一般用在集合类上或者数组上
3.@NotBlank
只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符
在使用 @Length 一般用在 String 类型上可对字段数值进行最大长度限制的控制。
@Valid
Controller层
@PoseMapping(value="/XXX ", produces="application/json")
@Operation(description="")
public ResponseEntity<?> XXX (@Valid @RequestBody requestDto request, @RequestHeaders Headers headers ){
Sring user = (headers);
//...}
Service层
checkRequest(Dto dto){
if(!()){
throw new XXException(msg)
//throw new XXException(, msg)
}
if(!()){
}
if(!()){
}
Dto层
XXXrequestDto(){
//注解用于处理一些通用的验证
@NotBlank(message="xx cannot be null")
@JsonProperty("action")
private String action;
//valid()用于处理一些分情况的验证
public boolean valid(){
}
public boolean validForAdd(){
return StringUtils. isNotBlank(xxName) ;
}
public boolean validForEdit(){
return XXId !=null;
}
}
Example
String name = null;
@NotNull: false
@NotEmpty: false
@NotBlank: false
String name = “”;
@NotNull: true
@NotEmpty: false
@NotBlank: false
String name = " ";
@NotNull: true
@NotEmpty: true
@NotBlank: false
String name = “Great answer!”;
@NotNull: true
@NotEmpty: true
@NotBlank: true
ValidExceptionHandler
@Valid注解校验必填字段返回错误信息@Valid 校验必填字段,当参数非法时,抛出异常,然后返回统一的错误信息
- 全局异常处理 使用 @ControllerAdvice 实现全局异常处理,只需要定义类,添加该注解即可定义方式如下:
/**
* 全局校验异常处理
* */
@ControllerAdvice
public class ValidExceptionHandler {
/**
* 以 JSON 格式返回校验异常信息
* */
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler()
@ResponseBody
public Map<String, String> handleValidationException(MethodArgumentNotValidException e) {
Map<String, String> errors = new HashMap<>();
()
.getAllErrors()
.forEach(error -> {
String fieldName = ((FieldError)error).getField(); // 字段名
String errorMessage = (); // 校验失败信息
(fieldName, errorMessage);
});
return errors;
}
}