日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何在spring boot中進行參數校驗示例詳解

瀏覽:200日期:2023-09-05 18:13:31

上文我們討論了spring-boot如何去獲取前端傳遞過來的參數,那傳遞過來總不能直接使用,需要對這些參數進行校驗,符合程序的要求才會進行下一步的處理,所以本篇文章我們主要討論spring-boot中如何進行參數校驗。

lombok使用介紹

在介紹參數校驗之前,先來了解一下lombok的使用,因為在接下來的實例中或有不少的對象創建,但是又不想寫那么多的getter和setter,所以先介紹一下這個很強大的工具的使用。

Lombok 是一個可以通過簡單的注解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,通過使用對應的注解,可以在編譯源碼的時候生成對應的方法。

添加maven依賴

在pom文件中添加如下內容:

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version></dependency>

基礎注解

@Getter給類增加get方法

@Setter給類增加set方法

@Builder給類增加構建者模式

@AllArgsConstructor給類增加全參構造方法

@NoArgsConstructor給類增加無參數構造方法

@RequiredArgsConstructor按照必填屬性增加構造方法

@NonNull變量值不能為空

這里只簡單列一下常用注解的含義,具體的使用方式在參數校驗的實例中體現。

實戰

上篇文章中我們用BannerCreateDto這個對象了來接收前端傳遞的參數,那時是手動添加的get和set方法,這里我們用lombok注解來簡化掉之前的樣板代碼:

@Setter@Getterpublic class BannerCreateDto { private String name; private Integer pos;}

接口的定義還是和之前一樣。不同做任何修改:

@PostMapping(value = '/create')public Map<String, Object> createBanner(@RequestBody BannerCreateDto dto){ Map<String, Object> res = new HashMap<>(); res.put('id', 10000); res.put('name', dto.getName()); res.put('pos', dto.getPos()); return res;}

重新運行程序,訪問接口

如何在spring boot中進行參數校驗示例詳解

還是和之前一樣,能夠請求成功并正常的返回數據。

一般情況下,我們會針對返回的數據,來單獨定義對象來進行描述,這里我們也定義一個

@Builder@Getterpublic class BannerResponseDto { private int id; private String name; private Integer pos;}

這里用到了@Builder、@Getter,在接口中構造對象并返回:

@PostMapping(value = '/create')public BannerResponseDto createBanner(@RequestBody BannerCreateDto dto){ return BannerResponseDto.builder() .id(500) .name(dto.getName()) .pos(dto.getPos()) .build();}

可以看到lombok的@Builder注解,能夠讓類通過構建者模式去創建對象,省去了大量的set代碼,而且可讀性也很好。

訪問接口,看看數據返回的時候正常:

如何在spring boot中進行參數校驗示例詳解

與之前是一樣的,能夠正常返回數據,那接下來我們就正式看一下,spring-boot如何進行參數校驗了。

參數校驗

參數校驗就是說對前端傳過來的數據進行合理性校驗,看他能否滿足我們的業務規則,那這些對參數進行校驗的代碼是該放在那里呢,是在Controller里還是說單獨存放,又獲取采用其他什么方式呢?

參數校驗該怎么做

首先要明確的一點,在Controller,不應該有大量邏輯判斷的代碼,為什么呢,我們可想想當參數較多的時候,對每個參數進行合理性校驗的話,那代碼量該有多少,那就會嚴重污染Controller,導致維護起來是很艱難的,所以應該要有一個合理的機制能把校驗的代碼抽離出來,從而保證Controller的簡潔性。

在java的世界里有這么個概念叫做 JSR,是Java Specification Requests的首字母縮寫,是編程語言Java規范請求或者說是Java語言的說明書,既然是說明書那就一定有各個版本,在JSR-303版本中,提出了Bean Validation的驗證規范,目前主要有兩個兩個框架實現了Bean Validation規范,一個事自帶的javax.validation.api和hibernate-validator框架,而hibernate-validator框架應用的更加廣泛一點。

那我們就用這種Bean Validation這種驗證框架進行參數的驗證

實戰

@RestController@Validatedpublic class BannerController { @GetMapping('/v3/banner') public Map<String, Object> getBannerDetailV2(@RequestParam Integer id, @RequestParam @Max(10) Integer pos){ Map<String, Object> body = new HashMap<>(); body.put('id', id); body.put('pos', pos); return body; }}

上面代碼中,@Max(10)注解來驗證輸入參數的pos,限制其輸入參數最大值為10,運行程序我們來測試一下:

如何在spring boot中進行參數校驗示例詳解

訪問接口http://localhost:8081/v3/banner?id=12&pos=33后,看到我們控制臺的輸出提示輸入不能超過10,這里的這個message不是我寫的哈,這是java國際化后的效果能夠根據你所在地區決定顯示什么語言。

當然這里我們也可以自定義錯誤的message:

@GetMapping('/v3/banner')public Map<String, Object> getBannerDetailV2(@RequestParam Integer id, @RequestParam @Max(value = 10, message = '超過10了,趕緊看看哇') Integer pos){ Map<String, Object> body = new HashMap<>(); body.put('id', id); body.put('pos', pos); return body;}

還是上面的請求路徑,看看控制臺輸出:

如何在spring boot中進行參數校驗示例詳解

可以看到控制臺輸出了我們自定義的內容。這里有一點要注意,要想使得校驗生效,比如在Controller上方打上@Validated注解,至于為什么我們后面分解。

上面的驗證都是比較基礎的數據類型,但是如果現在要有驗證更加復雜一點的java對象呢,又該如何操作,那接下來我們再看看這部分的內容。

java對象進行驗證單個對象

還是用上面的BannerResponseDto來進行演示

import org.hibernate.validator.constraints.Length;@Setter@Getterpublic class BannerCreateDto { @Length(min = 2, max = 4, message = 'banner名稱必須是2-10個字符') private String name; private Integer pos;}

對于這些基礎類型的成員變量仍然使用這些基礎注解進行校驗定義,上面我們使用了 @Length注解來定義banner名稱的字符長度范圍,并定義發生錯誤時提示的message,這里還需要在Controller里額外的處理一下:

@PostMapping('/v3/banner/create')public BannerResponseDto createBanner(@RequestBody @Validated BannerCreateDto dto){ return BannerResponseDto.builder() .id(500) .name(dto.getName()) .pos(dto.getPos()) .build();}

@Validated BannerCreateDto這里必須要加@Validated注解,否則無法觸發校驗機制。

嵌套

如果某個類的成員變量也是一個自定義對象,那校驗該是什么樣的呢,下面我們來看一下。

先定義一個新的對象,用來接收banner到的素材信息

@Getter@Setterpublic class MaterialDto { @Length(min = 2, max = 5, message = '素材的名稱長度范圍必須在2-5之內') private String name;}

然后banner對象增加一個成員變量

@Setter@Getterpublic class BannerCreateDto { @Length(min = 2, max = 4, message = 'banner名稱必須是2-10個字符') private String name; private Integer pos; @Valid private MaterialDto materialDto;}

這里有一點,要想使得這種級聯的關系能夠觸發校驗機制,必須 @Valid注解進行標記,我們來請求一下url看看效果

如何在spring boot中進行參數校驗示例詳解

可以看到校驗沒通過,再看看控制臺輸出內容:

如何在spring boot中進行參數校驗示例詳解

輸出了我們定義的錯誤信息。

總結

本篇文章主要介紹了里面lombok的使用,以及校驗規范介紹和校驗框架基本注解的使用,還有自定義對象校驗,下篇文章我們將通過自定義注解來實現更加個性化的校驗規則,敬請期待。

到此這篇關于如何在spring-boot中進行參數校驗的文章就介紹到這了,更多相關spring-boot 參數校驗內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美极品一区二区三区| 免费高清在线一区| 丝瓜av网站精品一区二区| 精品视频在线你懂得| 青青国产精品| 国产欧美日韩一区二区三区在线| 中文字幕日本一区二区| 免费不卡在线观看| 国产日韩中文在线中文字幕 | 国产精品大片免费观看| 一本色道精品久久一区二区三区| 国产在线不卡| 色综合五月天| 丝袜诱惑一区二区| 老牛国内精品亚洲成av人片| 青草av.久久免费一区| 久久精品国产免费| 在线国产一区二区| 欧美视频久久| 午夜在线一区| 91精品国产乱码久久久久久久 | 午夜影院一区| 啪啪国产精品| 激情综合网站| 国产精品毛片在线看| 亚洲视频国产精品| 亚洲综合福利| 国产精选久久| 久久永久免费| 在线精品一区| 国产欧美69| 99精品电影| 日韩avvvv在线播放| 欧美中文一区| 欧美国产日本| 欧美日韩国产高清| 日本a级不卡| 久久国产视频网| 久久精品成人| 日本综合精品一区| 给我免费播放日韩视频| 蜜臀av在线播放一区二区三区| 欧美精品国产一区| 欧美日韩国产在线观看网站| 粉嫩av一区二区三区四区五区| 亚洲欧美网站在线观看| 国产精品极品在线观看| 国产一级久久| 秋霞国产精品| 青青青国产精品| 欧美成人基地 | 亚洲成人二区| 一本一道久久a久久| 日本成人中文字幕在线视频| 欧美日韩国产亚洲一区| 国产精品视频一区视频二区| 蜜桃视频一区二区三区在线观看| 日韩国产欧美一区二区三区| 欧美日韩a区| 亚洲精品综合| 欧洲激情综合| 激情久久一区二区| 日韩精品一级| 黄色日韩在线| 色婷婷精品视频| 色在线视频观看| 国产精品香蕉| 蜜臀久久99精品久久久久宅男 | 欧美福利在线| 日韩av一区二区三区四区| 私拍精品福利视频在线一区| 久久久国产精品一区二区中文| 亚洲欧洲高清| 国产精品99久久免费观看| 日韩高清在线不卡| 日韩精品亚洲aⅴ在线影院| 蜜臀精品一区二区三区在线观看 | 亚洲不卡视频| 综合一区av| 亚洲一区日韩在线| 亚洲tv在线| 国产日韩电影| 免费日韩一区二区| 日韩精品福利一区二区三区| 日本成人一区二区| 日本久久综合| 国产精品蜜芽在线观看| 99久久www免费| 99国产成+人+综合+亚洲欧美| 亚洲二区精品| 蜜臀精品久久久久久蜜臀| 影音先锋久久| 97久久亚洲| 国产一区二区视频在线看| 蜜臀a∨国产成人精品| 国产精品手机在线播放| 久久国产主播| 欧美国产另类| 亚洲精品精选| 久久精品av| 国产精品极品在线观看| 欧美.日韩.国产.一区.二区| 国产欧美日韩在线一区二区| 怡红院精品视频在线观看极品| 国产传媒在线观看| 日韩高清一区二区| 老司机精品视频网| 日韩精品国产精品| 奇米狠狠一区二区三区| 尤物精品在线| 久久久久久亚洲精品美女| 九九在线精品| av日韩中文| 精品不卡一区| 精品中文字幕一区二区三区| 日韩欧美中文字幕电影| 欧美日韩国产一区二区三区不卡| 最近高清中文在线字幕在线观看1| 亚洲精品无吗| 亚洲一区二区三区中文字幕在线观看| 欧美国产极品| 国产模特精品视频久久久久| 三上亚洲一区二区| 国产精品白丝久久av网站| 国产一区调教| 欧美 日韩 国产一区二区在线视频 | 91偷拍一区二区三区精品| 日韩欧美另类中文字幕| 伊人影院久久| 久热综合在线亚洲精品| 日韩中文视频| 成人羞羞视频在线看网址| 久久国产视频网| 亚洲欧美久久| 99成人在线| 欧美一区精品| 国产一区福利| 色爱综合网欧美| 亚洲免费福利| 久久精品导航| 久久亚洲精品伦理| 亚洲无线观看| 国产精品久久久久久久久久白浆| 久久精品一区二区国产| 欧美成人一二区| 偷拍精品精品一区二区三区| 在线综合亚洲| 亚洲a级精品| 中文字幕免费精品| 日韩区一区二| 青青青免费在线视频| 亚洲一区久久| 美腿丝袜亚洲一区| 久久精品成人| 日韩av在线播放中文字幕| 日韩专区精品| 亚洲人妖在线| 极品日韩av| 男女性色大片免费观看一区二区| 国产精品xxx在线观看| 欧美日韩中文字幕一区二区三区| 亚洲福利国产| 91福利精品在线观看| 99国内精品| 激情黄产视频在线免费观看| 99久久99久久精品国产片果冰| 国产精品入口久久| 999久久久国产精品| 美女国产精品| 亚洲精品在线国产| 国产亚洲一区在线| 久久香蕉精品香蕉| 亚洲性视频在线| 日韩一区二区三区免费播放| 国产精品麻豆成人av电影艾秋| 天使萌一区二区三区免费观看| 久久99蜜桃| 久久久久久久久久久妇女| 一区二区国产精品| 国产精品99一区二区| 日韩在线不卡| 国产精品日韩精品中文字幕| 免费精品视频最新在线| 色综合www| 一本大道色婷婷在线| 日韩精品dvd| 日韩**一区毛片| 欧美特黄一区| 91亚洲人成网污www| 欧美精品高清| 日韩免费av| 国产成人精品亚洲线观看| 91精品国产经典在线观看| 一本一道久久a久久精品蜜桃| 中文在线а√在线8| 国产一区二区亚洲| 亚洲特色特黄| 在线一区免费观看| 亚洲日本在线观看视频| 99日韩精品|