package cn.jsonlu.passguard.model;

import cn.jsonlu.passguard.utils.MD5Util;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Locale; /**
* @author JsonLu
* @email jsonlu@qq.com
* @since 2016/2/22 19:35
*/
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class BaseModel { private String time;
private String device;
private String sign;
private String token;
private String service; public String getService() {
return service;
} public void setService(String service) {
this.service = service;
} public String getTime() {
return time;
} public void setTime(String time) {
this.time = time;
} public String getDevice() {
return device;
} public void setDevice(String device) {
this.device = device;
} public String getSign() {
return sign;
} public void setSign(String sign) {
this.sign = sign;
} public String getToken() {
return token;
} public void setToken(String token) {
this.token = token;
} public void makeSign() {
setSign(MD5Util.MD5(toString()));
} /**
* 验签
*
* @return
*/
public boolean verifSign() {
String trueSign = MD5Util.MD5(toString());
if (trueSign.equals(sign)) {
return true;
}
System.out.println("签名:" + trueSign);
return false;
} /**
* 遍历清空属性值
*/
public void clear() {
String[] fields = invokeFieldsName();
for (int i = ; i < fields.length; i++) {
try {
invokeMethod(this, fields[i]);
} catch (Exception e) {
e.printStackTrace();
}
}
} /**
* 清空属性值
*
* @param owner
* @param fieldName
* @throws Exception
*/
public void invokeMethod(Object owner, String fieldName) throws Exception {
Class<? extends Object> ownerClass = owner.getClass();
String methodName = fieldName.substring(, ).toUpperCase(Locale.getDefault()) + fieldName.substring();
Method method = ownerClass.getMethod("set" + methodName, String.class);
String str = new String();
str = null;
//此处不能直接放null,否则报错
method.invoke(owner, str);
} /**
* 获取属性名称列表
*
* @return
*/
public String[] invokeFieldsName() {
Field[] superFields = getClass().getSuperclass().getDeclaredFields();
Field[] fields = getClass().getDeclaredFields();
String[] fieldsName = new String[superFields.length + fields.length];
for (int i = ; i < superFields.length; i++) {
fieldsName[i] = superFields[i].getName();
}
for (int i = ; i < fields.length; i++) {
fieldsName[superFields.length + i] = fields[i].getName();
}
Arrays.sort(fieldsName);
return fieldsName;
} /**
* 获取属性值
*
* @param owner
* @param fieldName
* @param args
* @return
* @throws Exception
*/
public Object invokeMethod(Object owner, String fieldName, Object[] args) throws Exception {
Class<? extends Object> ownerClass = owner.getClass();
String methodName = fieldName.substring(, ).toUpperCase(Locale.getDefault()) + fieldName.substring();
Method method = ownerClass.getMethod("get" + methodName);
return method.invoke(owner);
} /**
* 转换为device=00-787-88855-6644&sign=45555格式
*
* @return
*/
@Override
public String toString() {
String[] fields = invokeFieldsName();
StringBuffer buffer = new StringBuffer();
for (int i = ; i < fields.length; i++) {
if ("sign".equals(fields[i])) {
continue;
}
Object value = null;
try {
value = invokeMethod(this, fields[i], null);
} catch (Exception e) {
e.printStackTrace();
}
if (null != value && !"".equals(value.toString())) {
buffer.append(fields[i] + "=" + value + "&");
}
}
if (buffer.length() == )
return null;
if (buffer.lastIndexOf("&") == (buffer.length() - )) {
buffer.setLength(buffer.length() - );
}
System.out.println("params source is : " + buffer.toString());
return buffer.toString();
}
}

BaseBean构造的更多相关文章

  1. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  2. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  3. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  4. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

  5. 【C++】类和对象(构造与析构)

    类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...

  6. Spring 设值注入 构造注入 p命名空间注入

    注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...

  7. 并发包的线程池第二篇--Executors的构造

    上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...

  8. 10、代码块、构造代码块、静态代码块及main方法之间的关系

    1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...

  9. json 构造和解析

    目录: (1)引入jar包: (2)json的构造: (3)json的解析: (4)遍历未知key. (1)java对json的处理,可借助org.json.jar. <!-- https:// ...

随机推荐

  1. UnixODBC

    UnixODBC下载安装地址:http://www.unixodbc.org/ DOWNLOAD Distribution Format unixODBC is currently availible ...

  2. 20141127 测试使用Word2013书写博客(代码高亮+公式支持)。

      PS :又经过几次测试,发现用于Word2010的高亮插件在Word2013上排版效果不是很好,慎用.不过公式编辑倒是挺方便的 测试使用Word2013书写博客. 大概一个月前,使用WindowL ...

  3. Dungeons and Candies

    Zepto Code Rush 2014:http://codeforces.com/problemset/problem/436/C 题意:k个点,每个点都是一个n * m的char型矩阵.对与每个 ...

  4. HAPROXY实习

    没事玩玩,简单搞定. 同一个URL可以分发到后端不同的WEB上. STATS页画也刷出来了. 参考网址: http://www.cnblogs.com/kgdxpr/p/3272861.html 如果 ...

  5. Unity NGUI实现Tabview

    unity版本:4.5.1 NGUI版本:3.5 参考链接:http://blog.csdn.net/g__dragon/article/details/17242969,作者:CSDN G_Drag ...

  6. bzoj3438

    很容易想到是最小割模型首先对于一个点i,从s到i连一条容量为ai的边,再从i连一条容量为bi的边到t然后就是处理附加权的问题了一开始受到之前的思维定势的影响,一直在思考怎么在作物之间连边由于每种额外收 ...

  7. java程序:set改造成map

    逻辑:       set是无序不重复数据元素的集合.       map是另一种set,如果将<key,value>看成一个整体的话,其实就是set.在map中,若用map的keyset ...

  8. 2015第37周五javascript函数arguments对象巧用一

    Javascript函数的一个巧妙利用:假定action中有一个JSONObject类型的对象data,其值有可能为空,则前台JSP页面的JS代码中想直接通过EL表达式,即${data}的形式访问对象 ...

  9. 【单调栈】Vijos P1926 紫色的手链

    题目链接: https://vijos.org/p/1926 题目大意: 给n个数(n<=100 000),求任意区间的最大值异或次大值的最大值. 题目思路: [模拟][单调栈] 我们维护一个严 ...

  10. about variables

    局部变量(Local Variable),全局变量(global variable),变量共享; 静态局部变量(static local variables),函数运行结束变量值不会消失,并且其它函数 ...