后端参数校验器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:用户实体

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) 对传入的对象中的所有字段去我们自己编写的参数校验器类中去找有没有同名方法,也就是找有没有需要被核验,如果需要就进行校验,最终将结果返回

 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     }
 

原文地址:https://www.cnblogs.com/HumorChen/p/10945666.html

时间: 2024-10-29 02:39:01

后端参数校验器v1.0(调用一个方法校验所有参数并得到校验结果,且包括错误原因)的相关文章

优酷&土豆视频广告屏蔽器 v1.0

本软件用于屏蔽优酷&土豆视频网站广告,先第一步,第二步,再第三步,最后重启浏览器即可,希望大家喜欢!~ https://pan.baidu.com/s/1kUORH8F 优酷&土豆视频广告屏蔽器 v1.0

迷你音乐播放器v1.0正式上线!

迷你音乐播放器V1.0正式上线! 功能: 1.随机播放切换开关 2.歌曲为服务器本地音乐 3.网上搜索功能暂不支持...看下图 简单戳戳感受一下吧.. 快来一起分享吧~~~GitHub(戳我)   原文地址:https://www.cnblogs.com/yadongliang/p/10336409.html

Java一个方法使用可变参数技巧

很久没有写日志了,最近由于项目紧张在研究一些Java的反射机制,想利用该机制更好的完善和封装项目还有代码,今天在研究反射时,沈阳斌子遇到一个问题就是封装一个方法时有可变参数的问题,经上网查找找到如下方式和技巧. 编写Java程序时,经常会遇到一个方法需要多个参数的情况.例如一个求和方法: public int add(int[] list){ int sum = 0; for (int i=0;i<list.length;i++) sum += list[i]; return sum; } 重载

反射获取一个方法中的参数名(不是类型)

一般来说,通过反射是很难获得参数名的,只能取到参数类型,因为在编译时,参数名有可能是会改变的,需要在编译时加入参数才不会改变. 使用注解是可以实现取类型名(或者叫注解名)的,但是要写注解,并不方便. 观察Spring mvc框架中的数据绑定,发现是可以直接把http请求中对应参数绑定到对应的参数名上的,他是怎么实现的呢? 先参考一下自动绑定的原理:Spring源码研究:数据绑定 在getMethodArgumentValues方法中,MethodParameter[] parameters =

android黑科技系列——分析某直播App的协议加密原理以及调用加密方法进行协议参数构造

一.前言 随着直播技术火爆之后,各家都出了直播app,早期直播app的各种请求协议的参数信息都没有做任何加密措施,但是慢慢的有人开始利用这个后门开始弄刷粉关注工具,可以让一个新生的小花旦分分钟变成网红.所以介于这个问题,直播App开始对网络请求参数做了加密措施.所以就是本文分析的重点.逆向领域不仅只有脱壳操作,一些加密解密操作也是很有研究的目的. 二.抓包查看加密协议 本文就看一款直播app的协议加密原理,以及如何获取加密之后的信息,我们如何通过探针技术,去调用他的加密函数功能.首先这里找突破点

调用save()方法,页面显示保存成功,但是数据库中没有值的原因

在DAO层调用save()方法,页面上显示成功,但是在数据库中查找时发现数据没有保存到数据库中的原因可能是: 1.Service层中是否在调用DAO层中的save()方法之前添加注解@Transactional,凡是对数据库的更新操作都要加上该句注解. 2.查看项目中的WEB-INF文件夹下面的application.xml文件,看看<tx:annotation-driven transaction-manager="transactionManager"/>标签中是否缺少

C#控制台 activator与invoke,利用反射调用一个类的无参数方法

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication1 9 { 10 class Program 11 { 12 static void Main(string[] a

C#控制台 activator与invoke,利用反射调用一个类的有参数方法

1 code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication1 9 { 10 class Program 11 { 12 static void Main(string[] a

企鹅FM音频下载器V1.0 企鹅FM下载器

之前想下载喜马拉雅上的音频文件,所以临时写了个喜马拉雅音频下载器,后来因为懒,也没再更新了(主要是没啥想下载的了) 现在呢,想下载一些企鹅FM上的音频文件,所以就临时写了这个 由于一些众所周知的原因(比如 懒),下载功能并没有写,程序只是生成了一个下载列表,大家可以用迅雷等工具下载后改名即可 下载回来的文件是m4a格式的,请根据需要转换格式 Enjoy~ 下载地址 企鹅FM音频下载器.rar 原文地址:https://www.cnblogs.com/ssboy/p/9170622.html