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. bzoj3141: [Hnoi2013]旅行

    Description   Input 第 一行为两个空格隔开的正整数n, m,表示旅行的城市数与旅行所花的月数.接下来n行,其中第 i行包含两个空格隔开的整数Ai和Bi,Ai表示他第i个去的城市编号 ...

  2. linker command failed with exit code 1

    这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...

  3. 酷炫地给py代码标上行数

    Python IDLE是没有显示行号的功能的,今天学了一个方式可以酷炫地给自己的代码加上行号,该方法直接修改代码,慎用哦!代码如下: import fileinput for line in file ...

  4. BZOJ 2423 最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  5. c#语句 (随堂练习)

    1. 方程ax²+bx+c=0:一元二次方程.求根    输入a,b,c的值    Δ=b²-4ac:若Δ<0方程无实根    若Δ>0,方程有两个不相同的实根x1 x2gen    若Δ ...

  6. Finding Nemo(bfs)

    Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 6988   Accepted: 1600 Description Nemo ...

  7. hdu-4638-Group(树状数组)

    题意 找到区间里有多少组连续数字串 分析: (转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数.我们从左往右扫描,依次考虑右端点为i ...

  8. AC自动机(Aho-Corasick automation)模板 HDU:2222

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> us ...

  9. i++和++i的老问题

    对于++j,该式是指先将j的值自加1,然后再取j的值.自增过后参与计算 i的值也为10:对于i++,该表达式是指先取i的值做运算,再将i加1.参见过计算后再自增

  10. 使用StaticResource给控件定义公共的样式和属性来写界面XAML

    一:效果图 二:定义公共的样式和属性 在MainPage.xaml中 <phone:PhoneApplicationPage.Resources> <SolidColorBrush ...