關(guān)于@NotNull注解失效的原因之一
@NotNull注解失效原因之一
給String類型加上@NotNull注解時,只有傳入的參數(shù)為空時才會報異常,當(dāng)傳入的為空字符串時并不會報異常,就會出現(xiàn)報異常的現(xiàn)象
傳參為空指的是該參數(shù)就沒有傳,為空字符串指的是有該參數(shù)但是是雙引號""
Lombok判斷注解怎么使用,
梳理下來為
@NotEmpty
用在集合類上@NotBlank
用在String上@NotNull
用在基本類型上
最后最重要的是,在接口參數(shù)前加注解’@Validated’
@Valid注解是什么
@Valid
用于驗證注解是否符合要求,直接加在變量user之前,在變量中添加驗證信息的要求,當(dāng)不符合要求時就會在方法中返回message 的錯誤提示信息。
@RestController @RequestMapping("/user") public class UserController { @PostMapping public User create (@Valid @RequestBody User user) { System.out.println(user.getId()); System.out.println(user.getUsername()); System.out.println(user.getPassword()); user.setId("1"); return user; } }
然后在 User 類中添加驗證信息的要求:
public class User { private String id; @NotBlank(message = "密碼不能為空") private String password; }
@NotBlank 注解所指的 password 字段,表示驗證密碼不能為空,如果為空的話,上面 Controller 中的 create 方法會將message 中的"密碼不能為空"返回。
當(dāng)然也可以添加其他驗證信息的要求:
限制 | 說明 |
---|---|
@Null | 限制只能為null |
@NotNull | 限制必須不為null |
@AssertFalse | 限制必須為false |
@AssertTrue | 限制必須為true |
@DecimalMax(value) | 限制必須為一個不大于指定值的數(shù)字 |
@DecimalMin(value) | 限制必須為一個不小于指定值的數(shù)字 |
@Digits(integer,fraction) | 限制必須為一個小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction |
@Future | 限制必須是一個將來的日期 |
@Max(value) | 限制必須為一個不大于指定值的數(shù)字 |
@Min(value) | 限制必須為一個不小于指定值的數(shù)字 |
@Past | 限制必須是一個過去的日期 |
@Pattern(value) | 限制必須符合指定的正則表達(dá)式 |
@Size(max,min) | 限制字符長度必須在min到max之間 |
@Past | 驗證注解的元素值(日期類型)比當(dāng)前時間早 |
@NotEmpty | 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) |
@NotBlank | 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的空格 |
驗證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式 |
除此之外還可以自定義驗證信息的要求,例如下面的 @MyConstraint:
public class User { private String id; @MyConstraint(message = "這是一個測試") private String username; }
注解的具體內(nèi)容:
@Constraint(validatedBy = {MyConstraintValidator.class}) @Target({ELementtype.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyConstraint { String message(); Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
下面是校驗器:
public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> { @Autowired private UserService userService; @Override public void initialie(@MyConstraint constarintAnnotation) { System.out.println("my validator init"); } @Override public boolean isValid(Object value, ConstraintValidatorContext context) { userService.getUserByUsername("seina"); System.out.println("valid"); return false; } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中使用or、in與union all在查詢命令下的效率對比
這篇文章主要介紹了MySQL中使用or、in與union all在查詢命令下的效率對比,論證了在通常情況下union all并不一定比or及in更快,需要的朋友可以參考下2015-11-11Windows服務(wù)器下MySql數(shù)據(jù)庫單向主從備份詳細(xì)實現(xiàn)步驟分享
將主服務(wù)器中的MySql數(shù)據(jù)庫同步到從服務(wù)器中,使得對主服務(wù)器的操作可以即時更新到從服務(wù)器,避免主服務(wù)器因環(huán)境或者網(wǎng)絡(luò)異常一時無法使用,達(dá)到備份效果,這篇文章整理的確實挺詳細(xì)的2012-05-05MySQL學(xué)習(xí)第二天 安裝和配置mysql winx64
MySQL學(xué)習(xí)第二天,主要為大家詳細(xì)介紹了在Windows 64位操作系統(tǒng)下安裝和配置MySQL的具體步驟,整理一份mysql winx64安裝配置方法教程,感興趣的小伙伴們可以參考一下2016-05-05MySQL對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行復(fù)制的基本過程詳解
這篇文章主要介紹了MySQL對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行復(fù)制的基本過程,解讀了Slave的一些相關(guān)配置,需要的朋友可以參考下2015-11-11mysql通過my.cnf修改默認(rèn)字符集為utf-8的方法和注意事項
本文主要給大家介紹mysql通過my.cnf修改默認(rèn)字符集為utf-8的方法,當(dāng)然你也可以設(shè)置成別的,國際點還是utf-8好,以及在修改過程中要注意的一些事項,有需要的朋友們可以參考借鑒。2016-09-09深入Mysql,SqlServer,Oracle主鍵自動增長的設(shè)置詳解
本篇文章是對Mysql,SqlServer,Oracle主鍵自動增長的設(shè)置進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報錯問題
這篇文章主要介紹了詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認(rèn)值(default)報錯問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01