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

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

Spring boot validation校驗方法實例

瀏覽:5日期:2023-03-24 16:57:21
前言

Spring boot validation校驗方法實例

接觸springboot一年多,是時候擺脫這種校驗方式了233 ,每個參數都if判斷,一眼看過去就是很low的程序員。

Validation有了這個插件就再也不用這樣去校驗參數了,可以讓我們在項目中不用浪費很多時間在參數校驗這里,從而更專注于業務邏輯

正文

首先引入依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

這里創建一個用戶的DTO對象

@Data@ApiModel('用戶-表單對象')public class SportsUserCreatForm{ @ApiModelProperty(value='用戶唯一標識',example = '0') @NotNull(groups = {Update.class}) private long id; @ApiModelProperty(value = '所屬機構唯一標識(冗余字段)', example = '0') private long organizationId; @ApiModelProperty('登錄用戶名') @NotBlank(message = '用戶名不能為空') @Length(max = 10, message = '用戶名最長為10位') private String loginName; @ApiModelProperty('密碼') private String password; @ApiModelProperty('手機號') private String phone; @ApiModelProperty('郵箱') private String email; @ApiModelProperty('性別( ’MALE’, ’FEMALE’ )') @NotNull(message = '用戶性別不能為空') private SportsUserEnumGender gander; @ApiModelProperty(value = '出生日期-13位時間戳',example = '0') private long birthday; @ApiModelProperty('身份證號') private String idNumber; @ApiModelProperty('用戶昵稱') private String nickname; }

在controller層添加@Validated注解,添加注解之后spring就會逐個校驗DTO中加了校驗注解的字段,完全通過才可以進入業務處理,否則就會拋出MethodArgumentNotValidException異常

@PostMapping('user/add') @RequiresAuthentication @ApiOperation('添加用戶') public SportsUser addUser(@Validated @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }

一般項目來說拋出異常都會有約定好的JSON格式返回錯誤碼和錯誤信息,如果不處理就無法按照約定格式返回。這里我們可以通過聲明全局異常處理類來攔截異常并將異常處理成前端能操作的JSON數據。(這里只需要關注MethodArgumentNotValidException異常)

@Slf4j@Order(Ordered.HIGHEST_PRECEDENCE)@RestControllerAdvicepublic 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);// 如果有多個異常,這里只取第一個異常。沒有必要把所有異常都拋出(錯就是錯,第一個校驗都沒通過,自然也輪不到第二個校驗。) String json = JsonUtils.obj2json(error); Map map = JsonUtils.json2map(json); OkMessage result = new OkMessage(); result.setMsg('請求參數錯誤'e.getBindingResult().getFieldError().getDefaultMessage() + ']'); result.setCode('PARAM-000001'); return new ResponseEntity<>(result, HttpStatus.OK); }}分組校驗

有的人就要發問了,'啊,你這校驗不行啊,我在添加的時候id是自動生成的不需要校驗,編輯的時候就需要校驗id了,我是不是要建兩個一模一樣的DTO,這樣豈不是顯得我很憨?!這不是增加無用代碼嗎?差評!'

其實不然,在此我們可以用到 groups 屬性來解決此場景下的問題。

聲明分組

注意:在聲明分組的時候盡量繼承 extend javax.validation.groups.Default。 否則,在你聲明@Validated(Update.class)的時候,就會出現你在默認沒添加groups = {}的時候的校驗組@Email(message = '郵箱格式不對')不會自動校驗,因為默認的校驗組是groups = {Default.class}。

import javax.validation.groups.Default; /** * 數據新增分組 */public interface Create extends Default { }

import javax.validation.groups.Default; /** * 數據更新分組 */public interface Update extends Default { }

Spring boot validation校驗方法實例

修改Controller中的@Validated注解,聲明校驗分組(下面用的是Create.class所以并不會校驗id)

@PostMapping('user/add') @RequiresAuthentication @ApiOperation('添加用戶') public SportsUser addUser(@Validated(Create.class) @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }下面附上注解說明 驗證注解 驗證的數據類型 說明 @AssertFalse Boolean,boolean 驗證注解的元素值是false @AssertTrue Boolean,boolean 驗證注解的元素值是true @NotNull 任意類型 驗證注解的元素值不是null @Null 任意類型 驗證注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存儲的是數字)子類型 驗證注解的元素值大于等于@Min指定的value值 @Max(value=值) 和@Min要求一樣 驗證注解的元素值小于等于@Max指定的value值 @DecimalMin(value=值) 和@Min要求一樣 驗證注解的元素值大于等于@ DecimalMin指定的value值 @DecimalMax(value=值) 和@Min要求一樣 驗證注解的元素值小于等于@ DecimalMax指定的value值 @Digits(integer=整數位數, fraction=小數位數) 和@Min要求一樣 驗證注解的元素值的整數位數和小數位數上限 @Size(min=下限, max=上限) 字符串、Collection、Map、數組等 驗證注解的元素值的在min和max(包含)指定區間之內,如字符長度、集合大小 @Past java.util.Date,java.util.Calendar;Joda Time類庫的日期類型 驗證注解的元素值(日期類型)比當前時間早 @Future 與@Past要求一樣 驗證注解的元素值(日期類型)比當前時間晚 @NotBlank CharSequence子類型 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的首位空格 @Length(min=下限, max=上限) CharSequence子類型 驗證注解的元素值長度在min和max區間內 @NotEmpty CharSequence子類型、Collection、Map、數組 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) @Range(min=最小值, max=最大值) BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子類型和包裝類型 驗證注解的元素值在最小值和最大值之間 @Email(regexp=正則表達式,flag=標志的模式) CharSequence子類型(如String) 驗證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式 @Pattern(regexp=正則表達式,flag=標志的模式) String,任何CharSequence的子類型 驗證注解的元素值與指定的正則表達式匹配 @Valid 任何非原子類型 指定遞歸驗證關聯的對象如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,在地址對象上加@Valid注解即可

此處只列出Hibernate Validator提供的大部分驗證約束注解,請參考hibernate validator官方文檔了解其他驗證約束注解和進行自定義的驗證約束注解定義。

常用的幾個:1.@NotNull:不能為null,但可以為empty('',' ',' ')2.@NotEmpty:不能為null,而且長度必須大于0 (' ',' ')3.@NotBlank:只能作用在String上,不能為null,而且調用trim()后,長度必須大于0('test') 即:必須有實際字符總結

到此這篇關于Spring boot validation校驗的文章就介紹到這了,更多相關Springboot validation校驗內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 有声小说,听书,听小说资源库-听世界网 | 南京欧陆电气股份有限公司-风力发电机官网 | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 深圳市简易检测技术有限公司| 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 自动配料系统_称重配料控制系统厂家 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 微型实验室真空泵-无油干式真空泵-微型涡旋耐腐蚀压缩机-思科涡旋科技(杭州)有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 消防设施操作员考试报名时间,报名入口,报考条件 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 |