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

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

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

瀏覽:12日期:2022-08-16 17:26:15

1、首先創(chuàng)建一個(gè)測(cè)試實(shí)體類Person,并攜帶如上注解,其注解的作用描述在message

package com.clickpaas.pojo;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Data;import org.hibernate.validator.constraints.Length;import org.hibernate.validator.constraints.Range;import javax.validation.constraints.*;import java.math.BigDecimal;import java.util.Date;import java.util.List;/** * @author 方延杰 * @version 1.0 * @since 2020/12/10 9:04 下午 */@Datapublic class Person { @Null(message = 'death必須為null') private String death; @AssertTrue(message = 'bool必須為true') private boolean bool; @AssertFalse(message = 'fal必須為false') private boolean fal; @Min(value = 1, message = 'min必須為數(shù)字,其值大于或等于指定的最小值') private Integer min; @Max(value = 10, message = 'max必須為數(shù)字,其值小于或等于指定的最大值') private Integer max; @DecimalMin(value = '1', message = 'minDeci最小不能小于1') private BigDecimal minDeci; @DecimalMax(value = '10', message = 'maxDeci最大不能大于10') private BigDecimal maxDeci; @Size(min = 1, max = 2, message = 'list集合的長(zhǎng)度最小不能小于1,最大不能大于2') private List<Object> list; @Digits(integer = 4, fraction = 2, message = 'digits整數(shù)位不能超過(guò)4個(gè),小數(shù)位不能超過(guò)2個(gè)') private BigDecimal digits; /** * 將前臺(tái)傳來(lái)的日期數(shù)據(jù)映射到此字段 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = 'yyyy-MM-dd HH:mm:ss', timezone = 'GMT+8') @Past(message = 'past必須為過(guò)去的日期') private Date past; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = 'yyyy-MM-dd HH:mm:ss', timezone = 'GMT+8') @Future(message = 'future必須為將來(lái)的日期') private Date future; @Pattern(regexp = '^1[3|4|5|7|8][0-9]{9}$', message = 'phone必須符合正則表達(dá)式') private String phone; @Email(message = 'email必須是郵箱格式') private String email; @Length(min = 1, max = 2, message = 'length長(zhǎng)度最小不能小于1,最大不能大于2') private String length; @NotEmpty(message = 'id不能為null,長(zhǎng)度大于0') private String id; @Range(min = 1, max = 12, message = 'month最小不能小于1,最大不能大于12') private Integer month; @NotBlank(message = 'name不能為null,字段串長(zhǎng)度大于0(限字符串)') private String name;}

2、封裝返回響應(yīng)體

package com.clickpaas.response;import lombok.AllArgsConstructor;import lombok.Data;/** * @author 方延杰 * @version 1.0 * @since 2019/7/3 4:32 下午 */@Data@AllArgsConstructorpublic class CodeMsg { private int code; private String msg; /** * 失敗 */ public static CodeMsg SERVER_ERROR = new CodeMsg(500, '服務(wù)端異常');}

package com.clickpaas.response;import lombok.AllArgsConstructor;import lombok.Data;/** * @author 方延杰 * @version 1.0 * @since 2019/7/3 4:35 下午 */@Data@AllArgsConstructorpublic class Result<T> { /** * 返回狀態(tài)碼 除200其余全部失敗 */ private int code; /** * 返回信息 除success其余全部失敗 */ private String msg; /** * 泛型數(shù)據(jù) */ private T data; /** * 成功時(shí)返回的類型 * * @param data 數(shù)據(jù) * @param <T> 泛型 * @return 泛型數(shù)據(jù) */ public static <T> Result<T> success(T data) { return new Result<>(200, 'success', data); } public static <T> Result<T> fail(CodeMsg codeMsg) { return new Result<>(codeMsg); } private Result(CodeMsg codeMsg) { if (codeMsg == null) { return; } this.code = codeMsg.getCode(); this.msg = codeMsg.getMsg(); }}

3、創(chuàng)建使用增強(qiáng)器攔截并返回異常信息

package com.clickpaas.config;import com.clickpaas.response.CodeMsg;import com.clickpaas.response.Result;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.servlet.http.HttpServletRequest;import java.util.Objects;/** * @author 方延杰 * @version 1.0 * @since 2018/12/10 4:59 下午 */@RestControllerAdvicepublic class GlobalExceptionInterceptor { @ExceptionHandler(value = MethodArgumentNotValidException.class) public Result<Object> exceptionHandler(HttpServletRequest request, Exception e) { String errMsg = '處理失敗'; if (e instanceof MethodArgumentNotValidException) { // 拿到參數(shù)校驗(yàn)具體異常信息 errMsg = Objects.requireNonNull(((MethodArgumentNotValidException) e).getBindingResult().getFieldError()).getDefaultMessage(); } return Result.fail(new CodeMsg(500, errMsg)); }}

4、創(chuàng)建控制層測(cè)試

package com.clickpaas.controller;import com.clickpaas.pojo.Person;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;/** * @author 方延杰 * @version 1.0 * @since 2020/12/10 9:03 下午 */@RestControllerpublic class ValidController { @PostMapping('/valid') public String valid(@Validated @RequestBody Person person) { return 'success'; }}

5、測(cè)試符合驗(yàn)證請(qǐng)求體訪問(wèn),請(qǐng)求體如下:

{ 'death':null, 'bool':true, 'fal':false, 'min':1, 'max':10, 'minDeci':1, 'maxDeci':10, 'list':[ {},{} ], 'digits':1144.12, 'past':'2020-10-01 10:00:00', 'future':'2022-10-01 10:00:00', 'phone':'15900445584', 'email':'yanjie.fang@clickpaas.com', 'length':'ab', 'id':' ', 'name':'a'}

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

6、故意修改不符合驗(yàn)證的數(shù)據(jù)

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

7、如果想做整體驗(yàn)證,如下:

package com.clickpaas.uitl;import javax.validation.ConstraintViolation;import javax.validation.Validation;import javax.validation.Validator;import java.util.List;import java.util.Set;import java.util.stream.Collectors;/** * Bean整體校驗(yàn)工具類 * * @author 方延杰 * @version 1.0 * @since 2020/12/10 10:08 下午 */public class ValidatorUtils { private static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator(); /** * Bean整體校驗(yàn),有不合規(guī)范,拼接message */ public static String validate(Object obj, Class<?>... groups) { StringBuilder errorMessage = new StringBuilder(); Set<ConstraintViolation<Object>> resultSet = VALIDATOR.validate(obj, groups); if (resultSet.size() > 0) { //如果存在錯(cuò)誤結(jié)果,則將其解析并進(jìn)行拼湊后異常拋出 List<String> errorMessageList = resultSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.toList()); errorMessageList.forEach(o -> errorMessage.append(o).append(';')); } return errorMessage.toString(); }}

8、整體測(cè)試類

詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性

到此這篇關(guān)于詳解Java后端優(yōu)雅驗(yàn)證參數(shù)合法性的文章就介紹到這了,更多相關(guān)Java 驗(yàn)證參數(shù)合法性內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 联系我们-腾龙公司上分客服微信19116098882 | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 海水晶,海水素,海水晶价格-潍坊滨海经济开发区强隆海水晶厂 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 专业音响设备_舞台音响设备_会议音响工程-首选深圳一禾科技 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 上海诺狮景观规划设计有限公司| 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 |