后端参数校验器v1.0(调用一个方法校验所有参数并得到校验结果,且包括错误原因)
一:介绍
在写后端时,面对多个参数,比如手机号码、密码等我们常常需要写验证逻辑,当需要验证的参数较多的时候我们会需要写很多的判断语句,这就造成了大量的代码冗余。因此我开发了一套参数验证器,只需要调用参数验证器实例化对象的校验方法即可对传入的对象中的所有参数进行校验。一句话就完成了对所有参数的校验。
项目使用案例:
完成注册业务:
1 @RestController 2 @RequestMapping("/cmpas/user") 3 public class UserController { 4 @Autowired 5 private IUserService iUserService; 6 @Autowired 7 private ResultData resultData; 8 @Autowired 9 private ParameterValidator parameterValidator; 10 @RequestMapping(value = "/register",params = {"PhoneNumber","Password","NickName","RealName","Gender"}) 11 public ResultData register(HttpSession httpSession, User user) 12 { 13 resultData.setResult(parameterValidator.validate(user)); 14 if(resultData.getResult().equals(ParameterValidator.SUCESS)) 15 { 16 //校验成功 17 if (iUserService.insert(user)) 18 resultData.setResult("注册成功"); 19 else 20 resultData.setResult("注册失败"); 21 } 22 //将错误原因返回 23 return resultData; 24 } 25 }
二:开发场景模拟(注册用户)
1:用户实体
1 2 3 4 5 6 | public class User{ private String Username; private String Password; //get、set方法<br> } |
2:开发自己的参数校验器(继承抽象类AbstractParameterValidator,写入自己的校验方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class ParameterValidator extends AbstractParameterValidator{<br> //校验用户名的方法 public String Username(String str) { String back= "用户名不合法" ; //错误提示 String regex= "[0-9a-zA-Z]{1,12}" ; //正则表达式 return str.matches(regex)?SUCCESS:back; //返回 } //校验密码的方法 public String Password(String str) { String back= "密码不合法" ; String regex= "[0-9a-zA-Z]{8,20}" ; return str.matches(regex)?SUCCESS:back; } } |
2:新建一个用户实体
1 2 3 4 | User user= new User(); //对用户实例user进行赋值 user.setUsername( "HumorChen" ); user.setPassword( "123456" ); |
调用参数校验器示范:
1 2 3 4 | //实例化参数验证器对象 ParameterValidator parameterValidator= new ParameterValidator(); //调用校验方法 String result=parameterValidator.validate(user); |
调用的时候只需要使用
1 | <strong>parameterValidator.validate(user);</strong><br><strong>全部通过校验则返回值为AbstractParameterValidator.SUCCESS</strong><br><strong>否则为不通过的原因</strong> |
1 | 三:结构 |
1 |
核心方法validate(Object... objects) 对传入的对象中的所有字段去我们自己编写的参数校验器类中去找有没有同名方法,也就是找有没有需要被核验,如果需要就进行校验,最终将结果返回
1 public String validate(Object... objects) { 2 StringBuilder stringBuilder = new StringBuilder(); 3 for (Object object : objects) 4 for (Field field : object.getClass().getDeclaredFields()) { 5 field.setAccessible(true); 6 Method method = null; 7 try { 8 method = this.getClass().getDeclaredMethod(field.getName(), String.class); 9 } catch (Exception e) { } 10 if (method != null) { 11 String result =null; 12 try{ 13 result=(String) method.invoke(this, field.get(object)); 14 //输出日志 15 log(field.getName(),field.get(object),result); 16 }catch (Exception e){} 17 if (!result.equals(SUCESS)) { 18 if (stringBuilder.length() > 0 && (!outputAllError)) 19 return stringBuilder.toString(); 20 stringBuilder.append(result); 21 stringBuilder.append("\n"); 22 } 23 } 24 } 25 return stringBuilder.length() == 0 ? SUCESS : stringBuilder.toString(); 26 }
1 | |
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/10945666.html
分类:
JavaWeb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~