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:// ...
随机推荐
- 概率质量函数:怀孕周期的PMF
__author__ = 'dell' import surveyimport Pmfimport matplotlib.pyplot as pyplot table = survey.Pregnan ...
- [BZOJ 3238] [AHOI 2013] 差异 【后缀数组 + 单调栈】
题目链接:BZOJ - 3238 题目分析 显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显. 求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组. 那么 ...
- Sereja ans Anagrams
Codeforces Round #215 (Div. 1) B:http://codeforces.com/problemset/problem/367/B 题意:给你两个序列a,b,然后给你一个数 ...
- db2中修改表字段的长度,查看表字段长度,以及查看表字段已存放值大小
修改表字段语句: alter table 表名 alter column 字段名 set data type varchar(7700) 如: ALTER TABLE JV_BI_BACK_OPER ...
- Eclipse控制台中文乱码
换了OS真是,主要就是对Eclipse的配置操作不熟悉.用着不顺手.源文件一直都是按照google java style的做法保存为UTF-8.现在显示乱码,就得改Eclipse解码的配置为 UTF- ...
- Sublime Text 3 配置
配置: { "font_face": "Source Code Pro", , "highlight_line": true, " ...
- 新的一年新的气象 云计算与SOA
[David S.Linthicum]著 云计算和SOA是不同的概念,但是它们却相互联系.SOA是架构模式,而云计算是架构的实例,或者说是架构的一种选择,SOA更具整体性和战略性,它解决的是包括业务驱 ...
- Python 实时日志平台 Sentry
原文地址:http://www.oschina.net/p/sentry Sentry 是一个实时的事件日志和聚合平台,基于 Django 构建. Sentry 可以帮助你将 Python 程序的所有 ...
- 在使用Math.random()生成6位随机数遇到的问题,并成功得到6位随机数
最近在做卫生局的一个考务网时需要实现一个短信发送验证码的功能,因此就必须使用到随机生成6位验证码的功能,开始觉的简单的,随便写了个 +); String messageCode = String.va ...
- 接口中的成员变量必须是static
首先要弄清接口的含义. 接口就是提供一种统一的'协议’, 而接口中的属性也属于'协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量. 在interface里面的变量都是public st ...