一.前言
- 使用springboot搭建項目時,我們都是采用的Restful風格接口,這里面問題來了,當前端調用接口或者是其他項目調用時,傳入參數時我們不能單一靠調用方來控制參數的準確性,自己也要一些參數進行判斷,進行非空之類的
簡單介紹
@NotEmpty
加了@NotEmpty的String類,Collection、Map、數組,是不能為null或者長度為0的(String、Collection、Map的isEmpth()方法)
@NotBlank
加了@NotBlank的String類不為null或者空
@NotNull
校驗不能為null。
使用方式
引入相關的依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
實體增加注解
@Data
public class TestVo{@NotEmpty(message = "姓名不能為空")private String name;@NotEmpty(message = "身份證不能為空")private String id;
controller接收實體加校驗注解@Valid
public TestVotest(@RequestBody @Valid TestVo data) {
}
異常信息獲取:自定義全局異常控制器
?
@RestControllerAdvice
public class MyExceptionHandler {Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);@ResponseBody@ExceptionHandler(BindException.class)public TestExceptionBody exceptionHandler(BindException bindException) {try {//這里獲取的的exceptionMessage 就是@NotEmpty(message = "姓名不能為空")中的messageString exceptionMessage = Objects.requireNonNull(bindException.getBindingResult().getFieldError()).getDefaultMessage();//自定義異常對象TestExceptionBody中自定義的message方法return TestExceptionBody.message(exceptionMessage);} catch (Exception e) {logger.error(e.toString());return TestExceptionBody.error();}}
}
區別
@NotEmpty用到集合香一些
@NotBlank用到String真香
@NotNull用到基本類型香一些
看似@NotEmpty更強大,其實有一個細微區別。
加了@NotBlank還能判定String類型中的空字符串,比如“ ”也是不會通過校驗的。
@NotNull,只判null,基本類型會好很多
綜述建議:
String 類型用@NotBlank
基本類型用@NotNull
其他類型用@NotEmpty
?