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

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

Spring Boot使用JSR-380進行校驗的示例

瀏覽:49日期:2023-07-21 14:39:14
介紹

JSR-380 是 J2EE 的一個規范,用于校驗實體屬性,它是 JSR-303 的升級版,在 Spring Boot 中可以基于它優雅實現參數校驗。

<!--more-->

示例

在沒有使用 JSR-380 之前,我們一般都會將參數校驗硬編碼在 controller 類中,示例:

public Result add(@RequestBody User user){ if(StringUtils.isBlank(user.getName())){ return Result.error('用戶名不能為空'); } // ...}

而使用 JSR-380 只需要通過添加對應的注解即可實現校驗,示例:

@Datapublic class User{ @NotBlank private String name; private Integer age;}

public Result register(@Validated @RequestBody User user){ // ...}

這樣看起來代碼是不是清爽了很多,只需要在需要校驗的字段上加上對應的校驗注解,然后對需要校驗的地方加上 @Validated 注解,然后框架就會幫我們完成校驗。

通過全局異常自定義錯誤響應

框架校驗失敗之后會拋出異常,需要捕獲這個異常然后來自定義校驗不通過的錯誤響應,這里直接貼代碼,兼容 @RequestBody 、 @ModelAttribute 、 @RequestParam 三種入參的校驗:

@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(value = {MethodArgumentNotValidException.class, BindException.class}) public ResponseEntity<Result> methodArgumentNotValidHandler(HttpServletRequest request, Exception e) { BindingResult bindingResult; if (e instanceof MethodArgumentNotValidException) { //@RequestBody參數校驗 bindingResult = ((MethodArgumentNotValidException) e).getBindingResult(); } else { //@ModelAttribute參數校驗 bindingResult = ((BindException) e).getBindingResult(); } FieldError fieldError = bindingResult.getFieldError(); return ResponseEntity.ok(Result.fail(Result.CODE_PARAMS_INVALID, '[' + fieldError.getField() + ']' + fieldError.getDefaultMessage())); } //@RequestParam參數校驗 @ExceptionHandler(value = {ConstraintViolationException.class, MissingServletRequestParameterException.class}) public ResponseEntity<Result> constraintViolationHandler(Exception e) { String field; String msg; if (e instanceof ConstraintViolationException) { ConstraintViolation<?> constraintViolation = ((ConstraintViolationException) e).getConstraintViolations().stream().findFirst().get(); List<Path.Node> pathList = StreamSupport.stream(constraintViolation.getPropertyPath().spliterator(), false) .collect(Collectors.toList()); field = pathList.get(pathList.size() - 1).getName(); msg = constraintViolation.getMessage(); } else { // 這個不是JSR標準返回的異常,要自定義提示文本 field = ((MissingServletRequestParameterException) e).getParameterName(); msg = '不能為空'; } return ResponseEntity.ok(Result.fail(Result.CODE_PARAMS_INVALID, '[' + field + ']' + msg)); }}

然后再訪問一下接口,可以看到錯誤提示已經按自定義的規范顯示了:

Spring Boot使用JSR-380進行校驗的示例

可以看到都不需要寫任何提示文本就可以完成校驗和提示,上圖的 不能為空 是框架內置的 I18N 國際化支持,每個注解都內置相應的提示模板。

常用校驗注解

注解 描述 @NotNull 驗證值不為 null @AssertTrue 驗證值為 true @Size 驗證值的長度介于 min 和 max 之間,可應用于 String、Collection、Map 和數組類型 @Min 驗證值不小于該值 @Max 驗證值不大于該值 @Email 驗證字符串是有效的電子郵件地址 @NotEmpty 驗證值不為 null 或空,可應用于 String、Collection、Map 和數組類型 @NotBlank 驗證字符串不為 null 并且不是空白字符 @Positive 驗證數字為正數 @PositiveOrZero 驗證數字為正數(包括 0) @Negative 驗證數字為負數 @NegativeOrZero 驗證數字為負數(包括 0) @Past 驗證日期值是過去 @PastOrPresent 驗證日期值是過去(包括現在) @Future 驗證日期值是未來 @FutureOrPresent 驗證日期值是未來(包括現在)

本文完整代碼放在 github 。

Java Bean Validation Basics

JSR-380 規范

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 皮带输送机-大倾角皮带输送机-皮带输送机厂家-河南坤威机械 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 废水处理-废气处理-工业废水处理-工业废气处理工程-深圳丰绿环保废气处理公司 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 分光色差仪,测色仪,反透射灯箱,爱色丽分光光度仪,美能达色差仪维修_苏州欣美和仪器有限公司 | 传动滚筒,改向滚筒-淄博建凯机械科技有限公司| 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 温室大棚建设|水肥一体化|物联网系统| 工业插头-工业插头插座【厂家】-温州罗曼电气 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 |