淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別
1:引入依賴(lài)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
@NotEmpty、@NotBlank、@NotNull 包的位置:
import javax.validation.constraints.*;
2:區(qū)別
@NotNull
適用于基本數(shù)據(jù)類(lèi)型(Integer,Long,Double等等),當(dāng) @NotNull 注解被使用在 String 類(lèi)型的數(shù)據(jù)上,則表示該數(shù)據(jù)不能為 Null(但是可以為 Empty)
注:被其標(biāo)注的字段可以使用 @size、@Max、@Min 對(duì)字段數(shù)值進(jìn)行大小的控制
@NotBlank
適用于 String 類(lèi)型的數(shù)據(jù)上,加了@NotBlank 注解的參數(shù)不能為 Null 且 trim() 之后 size > 0,必須有實(shí)際字符
@NotEmpty
適用于 String、Collection集合、Map、數(shù)組等等,加了@NotEmpty 注解的參數(shù)不能為 Null 或者 長(zhǎng)度為 0
3:使用方法
@Data
public class BigPeople {
@ApiModelProperty(value = "id" ,required = true)
@NotNull(message = "id不能為空")
@Length(message = "id不能超過(guò){max}個(gè)長(zhǎng)度",max = 10)
private Integer id;
@ApiModelProperty(value = "name" ,required = true)
@NotBlank(message = "name不能為空")
@Size(message = "名字最長(zhǎng)為{max} 個(gè)字",max = 10)
private String name;
@ApiModelProperty(value = "age" ,required = true)
@NotNull(message = "id不能為空")
@Range(message = "age的長(zhǎng)度范圍為{min}歲到{max}歲之間",min = 5,max = 10)
private Integer age;
@ApiModelProperty(value = "treeNode" ,required = true)
@NotEmpty(message = "treeNode不能為空")
private List<String> treeNode;
}@Valid 包位置:
import javax.validation.Valid;
@Validated 包的位置
import org.springframework.validation.annotation.Validated;
@ApiOperation(value = "新增或者修改一個(gè)人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Valid @RequestBody Person person){
Boolean updateOrInsert = personService.updateOrInsert(person);
if (updateOrInsert) {
return new Result(ResultCode.SUCCESS,updateOrInsert);
}
return new Result(ResultCode.ERROR, "新增或者修改一個(gè)人的信息失敗");
}
@ApiOperation(value = "新增或者修改一個(gè)人的信息")
@PostMapping("/updateOrInsert")
public Result updateOrInsert(@Validated @RequestBody Person person){
Boolean updateOrInsert = personService.updateOrInsert(person);
if (updateOrInsert) {
return new Result(ResultCode.SUCCESS,updateOrInsert);
}
return new Result(ResultCode.ERROR, "新增或者修改一個(gè)人的信息失敗");
}最上面三個(gè)注釋?zhuān)?必須需要搭配@Valid 或者@Validated使用,在檢驗(yàn)Controller的入?yún)⑹欠穹弦?guī)范時(shí)
@Valid 和 @Validated 比較
最后我們來(lái)對(duì) @Valid 和 @Validated 兩個(gè)注解進(jìn)行總結(jié)下:
1:@Valid 和 @Validated 兩者都可以對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),待校驗(yàn)字段上打的規(guī)則注解(@NotNull, @NotEmpty等)都可以對(duì) @Valid 和 @Validated 生效;
2:@Valid 進(jìn)行校驗(yàn)的時(shí)候,需要用 BindingResult 來(lái)做一個(gè)校驗(yàn)結(jié)果接收。當(dāng)校驗(yàn)不通過(guò)的時(shí)候,如果手動(dòng)不 return ,則并不會(huì)阻止程序的執(zhí)行;
3:@Validated 進(jìn)行校驗(yàn)的時(shí)候,當(dāng)校驗(yàn)不通過(guò)的時(shí)候,程序會(huì)拋出400異常,阻止方法中的代碼執(zhí)行,這時(shí)需要再寫(xiě)一個(gè)全局校驗(yàn)異常捕獲處理類(lèi),然后返回校驗(yàn)提示。
4:總體來(lái)說(shuō),@Validated 使用起來(lái)要比 @Valid 方便一些,它可以幫我們節(jié)省一定的代碼,并且使得方法看上去更加的簡(jiǎn)潔。
此包下其它常用的校驗(yàn)注解:
| 注解 | 含義 |
|---|---|
| @Null | 元素必須為null |
| @NotNull | 元素不能null |
| @AssertTrue | 元素必須為true |
| @AssertFalse | 元素必須是false |
| @Min(value) | 元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值 |
| @Max(value) | 元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值 |
| @DecimalMin(value) | 元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值 |
| @DecimalMax(value) | 元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值 |
| @Size(max,min) | 元素的大小必須在指定的范圍內(nèi) |
| @Digits(integer,fraction) | 元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi) |
| @Past | 元素必須是一個(gè)過(guò)去的日期 |
| @Future | 元素必須是一個(gè)將來(lái)的日期 |
| @Pattern(value) | 元素必須符合指定的正則表達(dá)式 |
@Length @NotEmpty @Range | 1:元素必須是電子郵箱地址 2:字符串的大小必須在指定的范圍內(nèi) 3:字符串必須非空 4:元素必須在合理的范圍內(nèi) |
到此這篇關(guān)于淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別的文章就介紹到這了,更多相關(guān)Spring @NotEmpty、@NotBlank、@NotNull內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot中@EnableAsync和@Async注解的使用小結(jié)
在SpringBoot中,可以通過(guò)@EnableAsync注解來(lái)啟動(dòng)異步方法調(diào)用的支持,通過(guò)@Async注解來(lái)標(biāo)識(shí)異步方法,讓方法能夠在異步線(xiàn)程中執(zhí)行,本文就來(lái)介紹一下,感興趣的可以了解一下2023-11-11
JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲
這篇文章主要為大家詳細(xì)介紹了JavaGUI實(shí)現(xiàn)隨機(jī)單詞答題游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
java線(xiàn)程中start和run的區(qū)別詳解
這篇文章主要介紹了java線(xiàn)程中start和run的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
通過(guò)字節(jié)碼看java中this的隱式傳參詳解
這篇文章主要給大家介紹了關(guān)于如何通過(guò)字節(jié)碼看java中this的隱式傳參的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
IDEA中配置Python環(huán)境并運(yùn)行方式
本文介紹了在Mac和Windows平臺(tái)上安裝Python環(huán)境的方法,并詳細(xì)講解了如何在IntelliJ IDEA中安裝Python插件、創(chuàng)建Python工程和運(yùn)行Python文件,同時(shí),還提到了一些常用的Python框架,如Django、Google App Engine和SQL支持2025-03-03
SpringQuartz定時(shí)任務(wù)核心組件JobDetail與Trigger配置
Spring框架與Quartz調(diào)度器的集成提供了強(qiáng)大而靈活的定時(shí)任務(wù)解決方案,本文主要介紹了SpringQuartz定時(shí)任務(wù)核心組件JobDetail與Trigger配置,具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
elasticsearch通過(guò)guice注入Node組裝啟動(dòng)過(guò)程
這篇文章主要為大家介紹了?elasticsearch通過(guò)guice注入Node組裝啟動(dòng)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

