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

您的位置:首頁技術(shù)文章
文章詳情頁

Spring中使用JSR303請求約束判空的實現(xiàn)

瀏覽:128日期:2023-07-28 11:38:16
1. 適用場景

有時候我們在表單里提交一系列參數(shù), 到后臺封裝成一個對象, 要對對象的屬性做各種字段值的約束; 這時候, 當然可以if-else一個一個的判斷, 有更簡潔的做法, 就是使用 JSR303+spring的validation:

2. 使用方法步驟(分3步) 實體類加字段約束注解 Controller類中@Valid標注啟用(@Validated也兼容@Valid) BindingResult獲取報錯信息

2.1 實體類加字段約束注解

如我們要收集前端表單的字段數(shù)據(jù)到Person實體中:

對需要約束的字段進行注解標注;

示例:

2.1.1 Person.java

package com.niewj.demo.model;import lombok.Data;import org.hibernate.validator.constraints.Length;import org.hibernate.validator.constraints.URL;import javax.validation.constraints.*;import java.util.List;@Datapublic class Person { @Length(min = 4, max = 10) @NotNull(message = 'name不能為空') private String name; @Min(0) @Max(40) @NotNull(message = 'age不能為空') private Integer age; @NotBlank @NotBlank @URL(message = 'logo必須是URL格式') private String logo; @NotEmpty(message = 'hobbies不能為空') private List<String> hobbies; @Email @NotNull(message = 'email不能為空!') private String mail;}

@NotNull 約束字段不可為空;

@NotEmpty 約束集合/map等不能為空不能為0元素

@Email 約束是 email格式

@URL 約束必須是url的格式

message屬性可以修改默認錯誤說明

2.2 Controller類中@Valid標注啟用(@Validated兼容@Valid)

2.2.1 HelloController.java

package com.niewj.demo.controller;import com.google.gson.Gson;import com.niewj.demo.common.Result;import com.niewj.demo.model.Person;import com.niewj.demo.service.TestService1;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.validation.Valid;import java.util.HashMap;import java.util.Map;/** * test * * @author niewj * @since 2020/11/16 15:22 */@Controllerpublic class HelloController { /** * @param person * @param bindingResult * @return */ @PostMapping('/test') @ResponseBody public Result doSth(@Valid @RequestBody Person person, BindingResult bindingResult) { Map<String, String> map = new HashMap<>(); if (bindingResult.hasErrors()) { bindingResult.getFieldErrors().stream().forEach(fe-> map.put(fe.getField(), fe.getDefaultMessage())); System.out.println(bindingResult.getFieldError().getDefaultMessage()); return Result.withErrorParamData(map); } return Result.withSuccessData(person); }}

@RequestBody可以將body中的請求流信息(Request.getInputStream)通過HttpMessageConverter自動轉(zhuǎn)換為目標java類型:

如果前端 Content-Type為application/json, 就使用 JSON消息轉(zhuǎn)換器 幫你轉(zhuǎn)為JSON對象; 如果前端 Content-Type為application/xml, 就使用 XML消息轉(zhuǎn)換器 幫你轉(zhuǎn)為xml; 如果前端 Content-Type為text/plain, 就是用 String消息轉(zhuǎn)換器 幫你轉(zhuǎn)成 String; (只有類型為String時才可以轉(zhuǎn)換)

2.2.2 Result.java:

package com.niewj.demo.common;import lombok.Data;import java.io.Serializable;import java.util.Map;/** * 返回結(jié)果模板封裝 * * @author niewj * @since 2020/12/17 18:05 */@Datapublic class Result<T> implements Serializable { private int code; private String msg; private T data; public Result(int code, String msg, T data) { this(code, msg); this.data = data; } public Result(int code, String msg) { this.msg = msg; this.code = code; } public static <T> Result<T> withData(ResponseEnum responseCode, T data) { Result<T> re = new Result(responseCode.getCode(), responseCode.getMsg()); re.data = data; return re; } public static Result<String> withSuccessNoData() { Result re = new Result(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getMsg()); re.data = ''; return re; } public static <T> Result<T> withSuccessData(T data) { Result re = new Result(ResponseEnum.SUCCESS.getCode(), ResponseEnum.SUCCESS.getMsg()); re.data = data; return re; } public static Result<Map<String, String>> withErrorParamData(Map<String, String> data) { Result re = new Result(ResponseEnum.BAD_REQUEST.getCode(), ResponseEnum.BAD_REQUEST.getMsg()); re.data = data; return re; }}

2.2.3 ResponseEnum.java

package com.niewj.demo.common;/** * 通用響應碼 */public enum ResponseEnum { SUCCESS(200, '成功'), BAD_REQUEST(400, '請求參數(shù)不合規(guī)'); /** * 錯誤碼 */ private Integer code; /** * 錯誤信息 */ private String msg; ResponseEnum(Integer code, String msg) { this.code = code; this.msg = msg; } public String getMsg() { return msg; } public Integer getCode() { return code; }}

2.3 BindingResult獲取報錯信息

BindingResult用來收集約束字段的錯誤信息, 可通過 bindingResult.hasErrors()的 true來過濾錯誤信息; bindingResult.getFieldErrors() 會返回 List<FieldError>; FieldError 得到字段名: getField(); 得到錯誤信息: getDefaultMessage() 3. 調(diào)用測試:

http://localhost:8888/test

3.1 請求用例1: 字段為空

header: Content-Type: application/json

{ 'name': '1'}

響應:

{ 'code': 400, 'msg': '請求參數(shù)不合規(guī)', 'data': { 'mail': 'email不能為空!', 'hobbies': 'hobbies不能為空', 'name': '長度需要在4和10之間', 'logo': '不能為空', 'age': 'age不能為空' }}

3.2 請求用例2: list無元素/email/url格式不對

header: Content-Type: application/json

{ 'name': '1234', 'hobbies': [], 'mail': 'niewj', 'logo': 'niewj.com'}

響應:

{ 'code': 400, 'msg': '請求參數(shù)不合規(guī)', 'data': { 'mail': '不是一個合法的電子郵件地址', 'hobbies': 'hobbies不能為空', 'logo': 'logo必須是URL格式', 'age': 'age不能為空' }}

3.3 請求用例3: 完整字段信息

header: Content-Type: application/json

{ 'name': '1234', 'hobbies': ['running'], 'mail': 'hi@niewj.com', 'logo': 'http://niewj.com', 'age': 40}

響應:

{ 'code': 200, 'msg': '成功', 'data': { 'name': '1234', 'age': 40, 'logo': 'http://niewj.com', 'hobbies': [ 'running' ], 'mail': 'hi@niewj.com' }}

到此這篇關(guān)于Spring中使用JSR303請求約束判空的實現(xiàn)的文章就介紹到這了,更多相關(guān)Spring JSR303請求約束判空內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 铸钢件厂家-铸钢齿轮-减速机厂家-淄博凯振机械有限公司 | 泰国试管婴儿_泰国第三代试管婴儿费用|成功率|医院—新生代海外医疗 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 欧景装饰设计工程有限公司-无锡欧景装饰官网| 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 汝成内控-行政事业单位内部控制管理服务商 | 都江堰招聘网-都江堰人才网 都江堰人事人才网 都江堰人才招聘网 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 |