当前位置: 首页 > 后端技术 > Java

springboot参数验证

时间:2023-04-01 13:56:16 Java

1.场景1)参数是一个实体web层,需要对前端传来的数据进行校验。如果按照下面的代码来写,会很浪费时间,而且代码看起来很乱。publicAjaxResultqueryUserProjectContent(AppletProjectappletProject){if(appletProject.getId()==null){returnAjaxResult.error("id为空");}if(appletProject.getContent()==null){returnAjaxResult.error("内容为空");}if(appletProject.getTitle()==null){returnAjaxResult.error("标题为空");}if(appletProject.getCoverImg()==null){returnAjaxResult.error("第一张图片为空");}}2)参数为单型数据publicAjaxResultqueryDownloadInfo(StringoutTradeNo){if(outTradeNo==null){returnAjaxResult.error("Error");}Mapmap=microProjectService.queryDownloadInfo(outTradeNo);returnAjaxResult.success(map);}2.改进1)引入pomorg.hibernatehibernate-validator5.3.1.Final注解实体类@DatapublicclassValidDemo{@Size(min=3,max=12,message="用户名要求的长度必须在3到12个字母之间")@Pattern(regexp="^[a-z]+$",message="用户名必须是a-z小写字母")privateStringname;@Size(min=6,max=6,message="密码必须为6位")@Pattern(regexp="^[0-9]+$",message="密码必须为6位")privateString密码;@Range(min=1,max=9,message="范围只能是1到9")privateIntegerrange;@NotNull(message="MailboxcannotbeNull")@Email(regexp="(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])",message="邮件格式不正确")privateStringemail;}添加@Valid@GetMapping("/validdemo")publicMapdemo(@ValidValidDemovalidDemo){returnApiResultMap.successResult(validDemo);}全局处理异常@ExceptionHandler(value={BindException.class})publicMapvalidationException(BindExceptionex){log.error(ex.getBindingResult().getFieldError().getDefaultMessage());returnApiResultMap.errorResult(ex.getBindingResult().getFieldError().getDefaultMessage());}2)入参为单数据类型配置MethodValidationPostProcessor@BeanpublicMethodValidationPostProcessormethodValidationPostProcessornew();}给web层添加注解@Validated@RestControllerpublicclassDemoController{}为方法添加验证@GetMapping("/validdemo3")publicMapdemo3(@NotNullStringstr,@NotNull@Range(min=0,max=10)Integera){returnApiResultMap.successResult(str+a);}全局异常检查/***参数检查错误异常*/@ExceptionHandler(ConstraintViolationException.class)publicAjaxResultconstraintViolationException(ConstraintViolationExceptione){Stringmessage=e.获取消息();字符串子字符串=message.substring(message.indexOf(".")+1);returnAjaxResult.error(substring.replace(":",""));}参考https://www.jianshu。com/p/1ed...文章,更详细的内容请访问他的个人博客:https://www.51bishe.site