后端参数校验器v1.0(调用一个方法校验所有参数并得到校验结果,且包括错误原因)
一:介绍
在写后端时,面对多个参数,比如手机号码、密码等我们常常需要写验证逻辑,当需要验证的参数较多的时候我们会需要写很多的判断语句,这就造成了大量的代码冗余。因此我开发了一套参数验证器,只需要调用参数验证器实例化对象的校验方法即可对传入的对象中的所有参数进行校验。一句话就完成了对所有参数的校验。
项目使用案例:
完成注册业务:
@RestController
@RequestMapping("/cmpas/user")
public class UserController {
@Autowired
private IUserService iUserService;
@Autowired
private ResultData resultData;
@Autowired
private ParameterValidator parameterValidator;
@RequestMapping(value = "/register",params = {"PhoneNumber","Password","NickName","RealName","Gender"})
public ResultData register(HttpSession httpSession, User user)
{
resultData.setResult(parameterValidator.validate(user));
if(resultData.getResult().equals(ParameterValidator.SUCESS))
{
//校验成功
if (iUserService.insert(user))
resultData.setResult("注册成功");
else
resultData.setResult("注册失败");
}
//将错误原因返回
return resultData;
}
}
二:开发场景模拟(注册用户)
1:用户实体
public class User{
private String Username;
private String Password;
//get、set方法
}
2:开发自己的参数校验器(继承抽象类AbstractParameterValidator,写入自己的校验方法)
public class ParameterValidator extends AbstractParameterValidator{
//校验用户名的方法
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:新建一个用户实体
User user=new User();
//对用户实例user进行赋值
user.setUsername("HumorChen");
user.setPassword("123456");
调用参数校验器示范:
//实例化参数验证器对象
ParameterValidator parameterValidator=new ParameterValidator();
//调用校验方法
String result=parameterValidator.validate(user);
调用的时候只需要使用
parameterValidator.validate(user);
全部通过校验则返回值为AbstractParameterValidator.SUCCESS
否则为不通过的原因
三:结构
核心方法validate(Object... objects) 对传入的对象中的所有字段去我们自己编写的参数校验器类中去找有没有同名方法,也就是找有没有需要被核验,如果需要就进行校验,最终将结果返回
public String validate(Object... objects) {
StringBuilder stringBuilder = new StringBuilder();
for (Object object : objects)
for (Field field : object.getClass().getDeclaredFields()) {
field.setAccessible(true);
Method method = null;
try {
method = this.getClass().getDeclaredMethod(field.getName(), String.class);
} catch (Exception e) { }
if (method != null) {
String result =null;
try{
result=(String) method.invoke(this, field.get(object));
//输出日志
log(field.getName(),field.get(object),result);
}catch (Exception e){}
if (!result.equals(SUCESS)) {
if (stringBuilder.length() > 0 && (!outputAllError))
return stringBuilder.toString();
stringBuilder.append(result);
stringBuilder.append("\n");
}
}
}
return stringBuilder.length() == 0 ? SUCESS : stringBuilder.toString();
}
后端参数校验器v1.0(调用一个方法校验所有参数并得到校验结果,且包括错误原因)的更多相关文章
- 硬盘图标修改器 V1.0 绿色版
软件名称:硬盘图标修改器 V1.0 绿色版软件语言: 简体中文授权方式: 免费软件应用平台: Win7 / Vista / Win2003 / WinXP / Win2008 软件大小: 12.3MB ...
- 迷你音乐播放器v1.0正式上线!
迷你音乐播放器V1.0正式上线! 版本介绍: 1.随机播放切换开关(通过点击专辑图片) 2.通过拖动歌曲名及艺术家名调整歌曲播放进度 3.手机浏览访问支持熄屏播放 4.暂不支持在线搜索功能 快来一起分 ...
- 利用Ajax调用controller方法并传递参数
一.背景由于近期工作需要将人脸识别功能与选课系统结合,但是对前端知识了解的很少,只能边做边学了,因此在这边把遇到的一些坑说明一下,希望能帮助到像我一样的初学者 二.具体内容这里采用框架为MVC,如果想 ...
- Groovy小结:java调用Groovy方法并传递参数
Groovy小结:java调用Groovy方法并传递参数 @(JAVA总结) 1. 场景描述 在网上查了资料发现,java有三种方式调用groovy脚本.但是真正在实际的服务器环境中,嵌入groovy ...
- SmartIDE v1.0.23 一个非常不敏捷的发布
SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已经发布,在超过4000 个 Builds 之后,我们终于发布了v1. ...
- android黑科技系列——分析某直播App的协议加密原理以及调用加密方法进行协议参数构造
一.前言 随着直播技术火爆之后,各家都出了直播app,早期直播app的各种请求协议的参数信息都没有做任何加密措施,但是慢慢的有人开始利用这个后门开始弄刷粉关注工具,可以让一个新生的小花旦分分钟变成网红 ...
- odoo14 button 事件调用python方法如何传递参数
1 <field name="user_ids" 2 mode="kanban" 3 nolabel="1" 4 options=&q ...
- 调用save()方法,页面显示保存成功,但是数据库中没有值的原因
在DAO层调用save()方法,页面上显示成功,但是在数据库中查找时发现数据没有保存到数据库中的原因可能是: 1.Service层中是否在调用DAO层中的save()方法之前添加注解@Transact ...
- [Chrome插件] SelectJd(京东自营筛选器) v1.0.0 发布
如今京东的商品列表已经没有"自营"筛选了,只有"京东物流"筛选.导致找商品时不方便. 于是我开发了一下Chrome插件--SelectJd(京东自营筛选器). ...
随机推荐
- IDEA分配内存无效
idea改启动内存分配, 改 C:/Users/xxx/.IntelliJIdea2018.1/confing/idea64.exe.vmoptions 或 C:/Users/xxx/.Intelli ...
- 【转载】 导入GoogleClusterData到MySQL
原文地址: https://www.cnblogs.com/instant7/p/4159022.html ---------------------------------------------- ...
- 002——Angular 目录结构分析、app.module.ts 详解、以及 Angular 中创建组件、组件 详解、 绑定数据
一.目录结构分析 二. app.module.ts.组件分析 1.app.module.ts 定义 AppModule,这个根模块会告诉 Angular 如何组装该应用. 目前,它只声明了 AppCo ...
- EAI并发
具体配置情况: 10.10.0.40:
- 【DataBase】Hsqldb的简单使用
介绍 HSQLDB是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的.具有Server模式,每个程序需要不同的命令来运行. HyperSQL ...
- git clone 使用用户名和密码
git clone http://邮箱(或用户名):密码@仓库 示例: 邮箱 xw@qq.com 密码: xw 仓库: http://git.test.com/abc/demo 注意: 邮箱中的 @ ...
- Locust性能测试-分布式执行的方法(亲测ok)
来源:https://www.cnblogs.com/yoyoketang/p/11681370.html 前言 使用Locust进行性能测试时,当一台单机不足以模拟所需的用户数量的时候,可以在多台机 ...
- response.getWriter().write的用法
/** * 获取手机验证码的方法 */ var loopObjBindMobil = null; var secondsBindMobil = 0; function hqBindYzm(moblie ...
- 使用meta跳转页面
<Meta http-equiv="Refresh" Content="3; Url=http://www.baidu.com">
- node不要使用最新版本,使用LTS版本
错误现象 const { Math, Object, Reflect } = primordials; 原因 使用了最新的node版本 解决 使用稳定版本,参考官网说明,目前10.x的版本是稳定版本( ...

