电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:115日期: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
相關文章:
主站蜘蛛池模板: NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 智能终端_RTU_dcm_北斗星空自动化科技| 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 博医通医疗器械互联网供应链服务平台_博医通 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 利浦顿蒸汽发生器厂家-电蒸汽发生器/燃气蒸汽发生器_湖北利浦顿热能科技有限公司官网 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 红酒招商加盟-葡萄酒加盟-进口红酒代理-青岛枞木酒业有限公司 | 土壤肥料养分速测仪_测土配方施肥仪_土壤养分检测仪-杭州鸣辉科技有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | pbootcms网站模板|织梦模板|网站源码|jquery建站特效-html5模板网 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 液压升降平台_剪叉式液压/导轨式升降机_传菜机定做「宁波日腾升降机厂家」 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 天津热油泵_管道泵_天津高温热油泵-天津市金丰泰机械泵业有限公司【官方网站】 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 |