后端参数校验器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(京东自营筛选器). ...
随机推荐
- vue模块化以及封装Storage组件实现保存搜索的历史记录
<template> <div id="app"> <input type="text" v-model='todo' @keyd ...
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- 泡泡一分钟:Project AutoVision - Localization and 3D Scene Perception for an Autonomous Vehicle with a Multi-Camera System
Project AutoVision - Localization and 3D Scene Perception for an Autonomous Vehicle with a Multi-Cam ...
- Qt编写自定义控件71-圆弧进度条
一.前言 现在web形式的图表框架非常流行,国产代表就是echart,本人用过几次,三个字屌爆了来形容,非常强大,而且易用性也非常棒,还是开源免费的,使用起来不要太爽,内置的各种图表和仪表盘等非常丰富 ...
- Python - Django - 上传文件
upload.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- delphi 多线程定时执行程序如何写
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- [BJOI2019] 删数 [dp转贪心结论+线段树]
题面 传送门 思路 dp部分 以下称合法序列为原题面中可以删空的序列 这个是我在模拟考场上的思路 一开始我是觉得,这个首先可以写成一个dp的形式:$dp[i][j]$表示用$j$个数字填满了目标序列的 ...
- numpy 数组集合运算及下标操作
1. 数组的集合运算 1.1. 并集 np.union1d(a,b)计算数组的并集: In [1]: import numpy as np In [2]: a = np.array([1,2,3]) ...
- 串的两种模式匹配方式(BF/KMP算法)
前言 串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操作之一,而不同的算法实现有着不同的 ...
- LeetCode 378. 有序矩阵中第K小的元素(Kth Smallest Element in a Sorted Matrix) 13
378. 有序矩阵中第K小的元素 378. Kth Smallest Element in a Sorted Matrix 题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩 ...