激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Spring boot validation校驗(yàn)方法實(shí)例

Spring boot validation校驗(yàn)方法實(shí)例

2021-08-11 11:564年了還是個(gè)菜比 Java教程

這篇文章主要給大家介紹了關(guān)于Spring boot validation校驗(yàn)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

Spring boot validation校驗(yàn)方法實(shí)例

接觸springboot一年多,是時(shí)候擺脫這種校驗(yàn)方式了233 ,每個(gè)參數(shù)都if判斷,一眼看過(guò)去就是很low的程序員。

validation有了這個(gè)插件就再也不用這樣去校驗(yàn)參數(shù)了,可以讓我們?cè)陧?xiàng)目中不用浪費(fèi)很多時(shí)間在參數(shù)校驗(yàn)這里,從而更專注于業(yè)務(wù)邏輯

正文

首先引入依賴

?
1
2
3
4
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-web</artifactid>
</dependency>

這里創(chuàng)建一個(gè)用戶的dto對(duì)象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@data
@apimodel("用戶-表單對(duì)象")
public class sportsusercreatform{
 
 @apimodelproperty(value="用戶唯一標(biāo)識(shí)",example = "0")
 @notnull(groups = {update.class})
 private long id;
 
 @apimodelproperty(value = "所屬機(jī)構(gòu)唯一標(biāo)識(shí)(冗余字段)", example = "0")
 private long organizationid;
 
 @apimodelproperty("登錄用戶名")
 @notblank(message = "用戶名不能為空")
 @length(max = 10, message = "用戶名最長(zhǎng)為10位")
 private string loginname;
 
 @apimodelproperty("密碼")
 private string password;
 
 @apimodelproperty("手機(jī)號(hào)")
 private string phone;
 
 @apimodelproperty("郵箱")
 private string email;
 
 @apimodelproperty("性別( 'male', 'female' )")
 @notnull(message = "用戶性別不能為空")
 private sportsuserenumgender gander;
 
 @apimodelproperty(value = "出生日期-13位時(shí)間戳",example = "0")
 private long birthday;
 
 @apimodelproperty("身份證號(hào)")
 private string idnumber;
 
 @apimodelproperty("用戶昵稱")
 private string nickname;
 
}

在controller層添加@validated注解,添加注解之后spring就會(huì)逐個(gè)校驗(yàn)dto中加了校驗(yàn)注解的字段,完全通過(guò)才可以進(jìn)入業(yè)務(wù)處理,否則就會(huì)拋出methodargumentnotvalidexception異常

?
1
2
3
4
5
6
@postmapping("user/add")
@requiresauthentication
@apioperation("添加用戶")
public sportsuser adduser(@validated @requestbody sportsusercreatform user) throws exception{
return userbiz.adduser(user);
}

一般項(xiàng)目來(lái)說(shuō)拋出異常都會(huì)有約定好的json格式返回錯(cuò)誤碼和錯(cuò)誤信息,如果不處理就無(wú)法按照約定格式返回。這里我們可以通過(guò)聲明全局異常處理類來(lái)攔截異常并將異常處理成前端能操作的json數(shù)據(jù)。(這里只需要關(guān)注methodargumentnotvalidexception異常)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@slf4j
@order(ordered.highest_precedence)
@restcontrolleradvice
public class globalexceptionadvice {
 
 @exceptionhandler(methodargumentnotvalidexception.class)
 @responsebody
 public responseentity<object> handlebeanvalidation(httpservletresponse res, methodargumentnotvalidexception e) throws exception{
 res.setstatus(httpstatus.ok.value());
 list<objecterror> errors = e.getbindingresult().getallerrors();
 objecterror error = errors.get(0);// 如果有多個(gè)異常,這里只取第一個(gè)異常。沒(méi)有必要把所有異常都拋出(錯(cuò)就是錯(cuò),第一個(gè)校驗(yàn)都沒(méi)通過(guò),自然也輪不到第二個(gè)校驗(yàn)。)
 string json = jsonutils.obj2json(error);
 map map = jsonutils.json2map(json);
 okmessage result = new okmessage();
 result.setmsg("請(qǐng)求參數(shù)錯(cuò)誤"e.getbindingresult().getfielderror().getdefaultmessage() + "]");
 result.setcode("param-000001");
 return new responseentity<>(result, httpstatus.ok);
 }
}

分組校驗(yàn)

有的人就要發(fā)問(wèn)了,"啊,你這校驗(yàn)不行啊,我在添加的時(shí)候id是自動(dòng)生成的不需要校驗(yàn),編輯的時(shí)候就需要校驗(yàn)id了,我是不是要建兩個(gè)一模一樣的dto,這樣豈不是顯得我很憨?!這不是增加無(wú)用代碼嗎?差評(píng)!"

 其實(shí)不然,在此我們可以用到 groups 屬性來(lái)解決此場(chǎng)景下的問(wèn)題。

聲明分組

注意:在聲明分組的時(shí)候盡量繼承 extend javax.validation.groups.default。 否則,在你聲明@validated(update.class)的時(shí)候,就會(huì)出現(xiàn)你在默認(rèn)沒(méi)添加groups = {}的時(shí)候的校驗(yàn)組@email(message = "郵箱格式不對(duì)")不會(huì)自動(dòng)校驗(yàn),因?yàn)槟J(rèn)的校驗(yàn)組是groups = {default.class}。

?
1
2
3
4
5
6
7
8
import javax.validation.groups.default;
 
/**
 * 數(shù)據(jù)新增分組
 */
public interface create extends default {
 
}
?
1
2
3
4
5
6
7
8
import javax.validation.groups.default;
 
/**
 * 數(shù)據(jù)更新分組
 */
public interface update extends default {
 
}

Spring boot validation校驗(yàn)方法實(shí)例

修改controller中的@validated注解,聲明校驗(yàn)分組(下面用的是create.class所以并不會(huì)校驗(yàn)id)

?
1
2
3
4
5
6
@postmapping("user/add")
@requiresauthentication
@apioperation("添加用戶")
public sportsuser adduser(@validated(create.class) @requestbody sportsusercreatform user) throws exception{
return userbiz.adduser(user);
}

下面附上注解說(shuō)明

驗(yàn)證注解 驗(yàn)證的數(shù)據(jù)類型 說(shuō)明
@assertfalse boolean,boolean 驗(yàn)證注解的元素值是false
@asserttrue boolean,boolean 驗(yàn)證注解的元素值是true
@notnull 任意類型 驗(yàn)證注解的元素值不是null
@null 任意類型 驗(yàn)證注解的元素值是null
@min(value=值) bigdecimal,biginteger, byte,short, int, long,等任何number或charsequence(存儲(chǔ)的是數(shù)字)子類型 驗(yàn)證注解的元素值大于等于@min指定的value值
@max(value=值) 和@min要求一樣 驗(yàn)證注解的元素值小于等于@max指定的value值
@decimalmin(value=值) 和@min要求一樣 驗(yàn)證注解的元素值大于等于@ decimalmin指定的value值
@decimalmax(value=值) 和@min要求一樣 驗(yàn)證注解的元素值小于等于@ decimalmax指定的value值
@digits(integer=整數(shù)位數(shù), fraction=小數(shù)位數(shù)) 和@min要求一樣 驗(yàn)證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限
@size(min=下限, max=上限) 字符串、collection、map、數(shù)組等 驗(yàn)證注解的元素值的在min和max(包含)指定區(qū)間之內(nèi),如字符長(zhǎng)度、集合大小
@past java.util.date,java.util.calendar;joda time類庫(kù)的日期類型 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
@future 與@past要求一樣 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間晚
@notblank charsequence子類型 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為0),不同于@notempty,@notblank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的首位空格
@length(min=下限, max=上限) charsequence子類型 驗(yàn)證注解的元素值長(zhǎng)度在min和max區(qū)間內(nèi)
@notempty charsequence子類型、collection、map、數(shù)組 驗(yàn)證注解的元素值不為null且不為空(字符串長(zhǎng)度不為0、集合大小不為0)
@range(min=最小值, max=最大值) bigdecimal,biginteger,charsequence, byte, short, int, long等原子類型和包裝類型 驗(yàn)證注解的元素值在最小值和最大值之間
@email(regexp=正則表達(dá)式,flag=標(biāo)志的模式) charsequence子類型(如string) 驗(yàn)證注解的元素值是email,也可以通過(guò)regexp和flag指定自定義的email格式
@pattern(regexp=正則表達(dá)式,flag=標(biāo)志的模式) string,任何charsequence的子類型 驗(yàn)證注解的元素值與指定的正則表達(dá)式匹配
@valid 任何非原子類型 指定遞歸驗(yàn)證關(guān)聯(lián)的對(duì)象如用戶對(duì)象中有個(gè)地址對(duì)象屬性,如果想在驗(yàn)證用戶對(duì)象時(shí)一起驗(yàn)證地址對(duì)象的話,在地址對(duì)象上加@valid注解即可

此處只列出hibernate validator提供的大部分驗(yàn)證約束注解,請(qǐng)參考hibernate validator官方文檔了解其他驗(yàn)證約束注解和進(jìn)行自定義的驗(yàn)證約束注解定義。

?
1
2
3
4
常用的幾個(gè):
1.@notnull:不能為null,但可以為empty(""," ","   ")
2.@notempty:不能為null,而且長(zhǎng)度必須大于0 (" ","  ")
3.@notblank:只能作用在string上,不能為null,而且調(diào)用trim()后,長(zhǎng)度必須大于0("test")    即:必須有實(shí)際字符

總結(jié)

到此這篇關(guān)于spring boot validation校驗(yàn)的文章就介紹到這了,更多相關(guān)springboot validation校驗(yàn)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_25533359/article/details/113866279

延伸 · 閱讀

精彩推薦
  • Java教程源碼級(jí)深挖AQS隊(duì)列同步器

    源碼級(jí)深挖AQS隊(duì)列同步器

    在java中提供了兩類鎖的實(shí)現(xiàn),一種是在jvm層級(jí)上實(shí)現(xiàn)的synchrinized隱式鎖,另一類是jdk在代碼層級(jí)實(shí)現(xiàn)的,juc包下的Lock顯示鎖,而提到Lock就不得不提一下它...

    碼農(nóng)參上7712021-04-13
  • Java教程詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)

    詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)

    這篇文章主要介紹了詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧...

    Fundebug4972021-07-02
  • Java教程Java中json與javaBean幾種互轉(zhuǎn)的講解

    Java中json與javaBean幾種互轉(zhuǎn)的講解

    今天小編就為大家分享一篇關(guān)于Java中json與javaBean幾種互轉(zhuǎn)的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小...

    8blues3842021-07-21
  • Java教程詳解path和classpath的區(qū)別

    詳解path和classpath的區(qū)別

    這篇文章主要介紹了詳解path和classpath的區(qū)別的相關(guān)資料,需要的朋友可以參考下...

    hejjunlin5392020-11-22
  • Java教程淺談Java三目運(yùn)算

    淺談Java三目運(yùn)算

    本文給大家主要介紹的是java中三目運(yùn)算的詳細(xì)介紹,并附上2個(gè)示例,希望對(duì)大家理解三目運(yùn)算能夠有所幫助。 ...

    hebedich2532019-12-13
  • Java教程javaweb設(shè)計(jì)中filter粗粒度權(quán)限控制代碼示例

    javaweb設(shè)計(jì)中filter粗粒度權(quán)限控制代碼示例

    這篇文章主要介紹了javaweb設(shè)計(jì)中filter粗粒度權(quán)限控制代碼示例,小編覺(jué)得還是挺不錯(cuò)的,需要的朋友可以參考。...

    bluzelee20119202021-01-18
  • Java教程Java 選擇、冒泡排序、折半查找(實(shí)例講解)

    Java 選擇、冒泡排序、折半查找(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇Java 選擇、冒泡排序、折半查找(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看...

    Java教程網(wǎng)2202020-12-09
  • Java教程SpringBoot實(shí)現(xiàn)excel文件生成和下載

    SpringBoot實(shí)現(xiàn)excel文件生成和下載

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)excel文件生成和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    shengshenglalala5582021-08-06
主站蜘蛛池模板: 亚洲精品有限 | 国产精品jk白丝蜜臀av软件 | 国产青青 | 男女羞羞视频在线免费观看 | 中文字幕精品久久 | 黄色羞羞视频在线观看 | 羞羞的视频 | 欧美亚洲国产成人综合在线 | 污污短视频 | 欧日一级片 | 99这里有精品 | 欧美一级在线免费 | 暴力肉体进入hdxxxx0 | 国产刺激高潮av | asian超清日本肉体pics | 91九色福利| 中国一级无毛黄色 | 国产精品久久久久久久久久尿 | 国产成人av在线 | 一级毛片免费高清 | 精品视频一区二区三区四区 | 911精品影院在线观看 | 久久96国产精品久久久 | 欧美a视频在线观看 | 久久人人爽人人爽人人片av高清 | 日韩高清电影 | 国产瑟瑟视频 | 久久久久久久久浪潮精品 | 久久久久9999| 亚洲精品久久久久久久久久 | 999久久久精品 | 国产污污视频 | 人人做人人看 | 在线免费观看欧美 | 亚洲视频在线一区二区 | 一二区电影 | 国产网站黄 | 极品大长腿啪啪高潮露脸 | 小雪奶水翁胀公吸小说最新章节 | 一本一道久久久a久久久精品91 | 99国产精品自拍 |