BaseBean构造
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构造的更多相关文章
- 学习笔记:Maven构造版本号的方法解决浏览器缓存问题
需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...
- 一步步构造自己的vue2.0+webpack环境
前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...
- About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷
构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...
- Eos开发——构造查询条件
1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...
- 【C++】类和对象(构造与析构)
类 类是一种抽象和封装机制,描述一组具有相同属性和行为的对象,是代码复用的基本单位. 类成员的访问权限 面向对象关键特性之一就是隐藏数据,采用机制就是设置类成员的访问控制权限.类成员有3种访问权限: ...
- Spring 设值注入 构造注入 p命名空间注入
注入Bean属性---构造注入配置方案 在Spring配置文件中通过<constructor-arg>元素为构造方法传参 注意: 1.一个<constructor-arg>元素 ...
- 并发包的线程池第二篇--Executors的构造
上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为.比如 ...
- 10、代码块、构造代码块、静态代码块及main方法之间的关系
1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. /*下面第一个类时合法的 ...
- json 构造和解析
目录: (1)引入jar包: (2)json的构造: (3)json的解析: (4)遍历未知key. (1)java对json的处理,可借助org.json.jar. <!-- https:// ...
随机推荐
- python学习的一些感悟
首先声明,这里用到的库是在coursera上学习时,老师建立的一个库 #timer import simplegui import random # global state message = &q ...
- Spring 配置自动扫描spring bean配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...
- BZOJ 1025 游戏
Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...
- The top 100 papers Nature explores the most-cited research of all time.
The top 100 papers Nature explores the most-cited research of all time. The discovery of high-temper ...
- Sliding Window
poj2823:http://poj.org/problem?id=2823 题意:给出一个序列,要求得到所有长度为k的连续子序列的最大和最小值.题解:直接上线段树 #include<iostr ...
- 工业CF卡与商业CF卡对比
工业CF卡:1.SLC FLASH芯片 .每个区块读写次数为10万次 2.可分区 识别为本地磁盘 3.平均写入技术.ECC自动校验技术 4.完全模拟硬盘引导系统开机,支持长期稳定工作 商业CF卡:1. ...
- 一句话改变TWinControl控件的left坐标的前世今生(入口函数是SetBounds,然后调用SetWindowPos起作用,并发消息更新Delphi的left属性值)
Delphi的重要属性,主要是Enable, Visible, Color, left等等.这里分析left,因为TWinControl里有些覆盖函数的原因,虽然起点都是TControl.SetLe ...
- HDOJ 1846 Brave Game
Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中 ...
- HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题
第一年参加现场赛,比赛的时候就A了这一道,基本全场都A的签到题竟然A不出来,结果题目重现的时候1A,好受打击 ORZ..... 题目链接:http://acm.hdu.edu.cn/showprobl ...
- redis合库
玩家数据全部保存在redis,对合服来绝对是个坑.因为一直都是做开发,合库这事还是第一次操作. 首先,合服要做哪些事情,当然不同的游戏肯定不一样.合服的目的是为了增加同个服务器上活跃玩家的数量.合服有 ...