區別
@NotNull在類字段中使用,表示該字段不能爲空。它是 JSR303(Bean的校驗框架)的註解。在調用controller的方法中加入@Valid就可以驗證該方法參數中該類的對應屬性是否爲空,如果爲空,註解中的提示信息會保存在result中。
@NonNull在方法或構造函數的參數上使用,表示該參數不能爲空。
@NotNull使用
/**
* user類
*/
@Data
public class User {
private int id;
@NotNull(message = "babyId不能爲空")
private String babyId;
}
/**
* controller的方法
* controller方法要加上@Valid ,表示需要驗證!
*/
@PostMapping("getMyUser")
@ResponseBody
public Baby getBaby(@Valid @RequestBody User user){
return babyService.getBabyById(user.getBabyId());
}
此時調用controller的getBaby方法時如果user中babyId爲空,那麼程序會報MethodArgumentNotValidException
獲取錯誤信息
將上面的getBaby改爲下面的例子:
@PostMapping("getMyUser")
@ResponseBody
public Baby getBaby(@Valid @RequestBody User user,Errors errors){
List<ObjectError> oes = errors.getAllErrors();
for (ObjectError oe : oes) {
String key = null;
String msg = null;
// 字段錯誤
if (oe instanceof FieldError) {
FieldError fe = (FieldError) oe;
key = fe.getField();// 獲取錯誤驗證字段名
} else {
// 非字段錯誤
key = oe.getObjectName();// 獲取驗證對象名稱
}
// 錯誤信息
msg = oe.getDefaultMessage();
System.out.println("key:"+key+";msg="+msg);
}
return babyService.getBabyById(user.getBabyId());
}
此時程序不會報錯,但是可以獲取錯誤信息:
key:babyId;msg=babyId不能爲空
其他註解及解釋
除了@NotNull,還有其他類似的註解,都是在類字段上使用
-
@Null 被註釋的元素必須爲null
-
@NotNull 被註釋的元素不能爲null,可以爲空字符串
*@AssertTrue 被註釋的元素必須爲true
*@AssertFalse 被註釋的元素必須爲false
*@Min(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
*@Max(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
*@DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
*@DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
*@Size(max,min) 被註釋的元素的大小必須在指定的範圍內。
*@Digits(integer,fraction) 被註釋的元素必須是一個數字,其值必須在可接受的範圍內
*@Past 被註釋的元素必須是一個過去的日期
*@Future 被註釋的元素必須是一個將來的日期
*@Pattern(value) 被註釋的元素必須符合指定的正則表達式。
*@Email 被註釋的元素必須是電子郵件地址
*@Length 被註釋的字符串的大小必須在指定的範圍內
*@Range 被註釋的元素必須在合適的範圍內
*@NotEmpty:用在集合類上,不能爲null,並且長度必須大於0
*@NotBlank:只能作用在String上,不能爲null,而且調用trim()後,長度必須大於0
@NonNull使用
@Override
@Transactional
public Baby getBabyById(@NonNull String babyId) {
return babyMapper.getBabyById(babyId);
}
如果 babyId 爲空getBabyById會報NullPointerException