简单的map转换成Bean的工具
简单的map转换成Bean的工具
package com.sd.microMsg.util; import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; public class MapUtil { /**
* map 转 Bean
*
* @param mpFrom
* @param objTo
* @return
*/
public static Object mapToBean(Map mpFrom, Object objTo) {
Object[] objKeys = mpFrom.keySet().toArray();
String strFieldName = ""; try {
for (Object objkey : objKeys) {
strFieldName = objkey.toString(); Field objField = objTo.getClass().getDeclaredField(
strFieldName.toLowerCase());
objField.setAccessible(true); objField.set(objTo, mpFrom.get(strFieldName));
}
} catch (Exception e) {
e.printStackTrace();
}
return objTo;
} /**
* map 转 Bean
*
* @param map
* @param cls
* @return
*/
public static Object mapToBean(Map map, Class cls) {
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// 取出bean里的所有方法
Method[] methods = cls.getMethods();
for (int i = 0; i < methods.length; i++) {
// 取方法名
String method = methods[i].getName();
// 取出方法的类型
Class[] cc = methods[i].getParameterTypes();
if (cc.length != 1)
continue; // 如果方法名没有以set开头的则退出本次for
if (method.indexOf("set") < 0)
continue;
// 类型
String type = cc[0].getSimpleName(); try {
// 转成小写
// Object value = method.substring(3).toLowerCase();
String methodAliasName = method.substring(3, 4).toLowerCase()
+ method.substring(4);
System.out.println("methodAliasName == " + methodAliasName);
// if (map.containsKey(methodAliasName) &&
// map.get(methodAliasName) != null) { // }
// 如果map里有该key
Set<String> set = map.keySet();
for (String key : set) {
if (methodAliasName.equalsIgnoreCase(key)) {
// 调用其底层方法
setValue(type, map.get(key), i, methods,
obj); }
} } catch (Exception e) {
e.printStackTrace();
}
}
return obj;
} /***************************************************************************
* 调用底层方法设置值
*/
private static void setValue(String type, Object value, int i,
Method[] method, Object bean) {
if (value != null && !value.equals("")) {
try {
if (type.equals("String")) {
// 第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] { value });
} else if (type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""
+ value) });
} else if (type.equals("double") || type.equals("Double")) {
method[i].invoke(bean,
new Object[] { new Double("" + value) });
} else if (type.equals("float") || type.equals("Float")) {
method[i].invoke(bean,
new Object[] { new Float("" + value) });
} else if (type.equals("long") || type.equals("Long")) {
method[i].invoke(bean,
new Object[] { new Long("" + value) });
} else if (type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean,
new Object[] { Boolean.valueOf("" + value) });
} else if (type.equals("BigDecimal")) {
method[i].invoke(bean, new Object[] { new BigDecimal(""
+ value) });
} else if (type.equals("Date")) {
Date date = null;
if (value.getClass().getName().equals("java.util.Date")) {
date = (Date) value;
} else {
String format = ((String) value).indexOf(":") > 0 ? "yyyy-MM-dd hh:mm:ss"
: "yyyy-MM-dd";
SimpleDateFormat sf = new SimpleDateFormat();
sf.applyPattern(format);
date = sf.parse((String) (value));
}
if (date != null) {
method[i].invoke(bean, new Object[] { date });
}
} else if (type.equals("byte[]")) {
method[i].invoke(bean,
new Object[] { new String(value + "").getBytes() });
}
} catch (Exception e) {
System.out
.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");
e.printStackTrace();
}
}
} public static void main(String[] args) {
User user = new User();
Map map = new HashMap();
map.put("userId", "123");
map.put("userName", "userName123");
map.put("userTel", "userTel123");
map.put("age", 234);
map.put("create", new Date());
map.put("money", new BigDecimal(123).setScale(2));
map.put("score", 23.33323);
Long start = System.currentTimeMillis();
user = (User) mapToBean(map, user.getClass());
Long end = System.currentTimeMillis();
System.out.println(" 用时 == " + (end - start));
System.out.println(user.toString());
}
}
简单的map转换成Bean的工具的更多相关文章
- 泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象
1.commons-beanutils的使用 commons-beanutils-1.9.3.jar 依赖 commons-logging-1.2.jar 代码1: String className ...
- map转换成list
Java代码如下: package Test01; import java.util.ArrayList; import java.util.HashMap; import java.util.Ite ...
- Map 转换成byte[] 数组
把Map转换成byte数组,使用 ByteArrayOutputStream和ObjectOutputStream Map<String,String> map = new HashMap ...
- 使用 js 实现一个中文自动转换成拼音的工具库
使用 js 实现一个中文自动转换成拼音的工具库 中文 => zhong-wen 应用场景 SEO 友好, URL 自动转换 blogs 发布文章,自动化部署,自动生成 url 的 path (时 ...
- java list map转换成二维数组
/** * *@Title: ListToArray *@Description: list列表转换成二维数组 *@Author: Administrator *@Since: 2018年1月7日下午 ...
- 使用fastjson将list、map转换成json,出现$ref
这是转换时出现的问题情况( map >> json ) 引用是通过"$ref"来表示的 引用 描述 "$ref":".." 上一 ...
- js将map转换成数组
/** * map转数组. * * @param {Map}map * map对象 * @return 数组 */ Share.map2Ary = function(map) { var list = ...
- map转换成JSON的3种方法
http://www.json.cn/JSON格式校验 1 json-lib <dependency> <groupId>net.sf.json-lib</groupId ...
- map转换成com.google.gson.JsonObject
String json =new Gson().toJson(map); JsonObject jsonObject =new JsonParser().parse(json).getAsJsonOb ...
随机推荐
- typedef的使用2——定义函数
#include <stdio.h> #include <string.h> #pragma warning(disable:4996) //闲言碎语都先不要讲了,直接上函数吧 ...
- C#总结3
第四章:文件管理 File类: 对于File类,里面的方法都是静态方法,就是直接可以用FIle来“.”: 记几个方法吧:File.Copy(string filename1,string f ...
- Java8的新特性
Java 8主要新特性包括如下几点: 一.接口的默认方法和静态方法 Java 8版之前,接口只有抽象方法,而在Java 8,为接口新增了两种类型的方法. 第一种是默认方法:在Java 8中,可 ...
- PHP 使用get_class_methods()和array_diff() 兩個相同的類中方法差集
进行二次开发时,习惯一份是原封不动的,一份正在修改.在修改时,发现修改的缺少原项目中的一些方法.本打算一个方法一个方法的对比,可是这样会比较花时间,划不来,PHP可以使用get_class_metho ...
- C语言碰到的一元二次方程
最近开始在学习C语言,看视频,是http://www.rjzxw.com/jc-74-1.html 碰到老师讲的一元二次方程例子,不懂,所以找了下资料,看了网上一元二次方程的视频(是自己太浮躁了,听不 ...
- 基于 JQUERY 网页 banner
demo.html <html> <head> <title>demo</title> <link href="css/PaPaBann ...
- JQuery 之 Ajax 异步和同步浅谈
Ajax 同步和异步的区别 同步是当 JS 代码加载到当前 Ajax 的时候会把页面里所有的代码停止加载,页面出现假死状态:当这个 Ajax 执行完毕后才会继续运行其他代码此时页面假死状态才会解除.反 ...
- RDLC打印或导出Word的 分页设置 页边距和页面大小
RDLC 导出Word的时候发现,Word的尺寸和页边距有问题,查了MSDN看到这样一段话 Page Sizing When the report is rendered, the Word page ...
- WPF 中,动态创建Button,并使Button得样式按照自定义的Resource样式显示
第一步:自定义一个Button的样式 1.新建一个xaml文件,在其中自定义好自己的Resources 这个Resource 的根节点是 <ResourceDictionary xmlns=&q ...
- spring mvc 全局异常处理
package com.tool; public class MyException extends Exception{ public String Msg; public String ErrCo ...