【Java】Map转换器
描述: 在控制层接收参数时候, 往往会出现Json格式需要转换为Bean.
通常一两个字段可以用new去save pojo, 但字段多的情况呢?
以下就是为了解决这个尴尬情况, 自己写一个转换工具类吧!
package com.lwc.demo; import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; /**
* @author eddie.lee
* @Package com.lwc.demo
* @ClassName Test09
* @description map converter
* @date created in 2018-03-22 14:53
* @modified by
*/ public class Test09 { /**
* Map converter bean
*
* @param clazz
* @param map
* @param <T>
* @return
*/
public static <T> T toBean(Class<T> clazz, Map map) {
T obj = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
obj = clazz.newInstance(); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
if ("".equals(value)) {
value = null;
}
Object[] args = new Object[1];
args[0] = value;
try {
descriptor.getWriteMethod().invoke(obj, args);
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return (T) obj;
} /**
* bean converter map
*
* @param bean
* @return
*/
public static Map toMap(Object bean) {
Class<? extends Object> clazz = bean.getClass();
Map<Object, Object> returnMap = new HashMap<>(16);
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (!propertyName.equals("class")) {
Method readMethod = descriptor.getReadMethod();
Object result = null;
result = readMethod.invoke(bean, new Object[0]);
if (null != propertyName) {
propertyName = propertyName.toString();
}
if (null != result) {
result = result.toString();
}
returnMap.put(propertyName, result);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return returnMap;
} public void MapConverterBean() {
Map map = new HashMap<>(16);
map.put("id", "1");
map.put("name", "eddie");
map.put("password", "123456");
TestPojo testPojo = toBean(TestPojo.class, map);
System.out.println("\nMapConverterBean => " + testPojo + "\n");
} public void BeanConverterMap() {
TestPojo pojo = new TestPojo();
pojo.setId("2");
pojo.setName("jenny");
pojo.setPassword("123456");
Map map = toMap(pojo);
System.out.println("BeanConverterMap => " + map + "\n");
} public static void main(String[] args) {
Test09 t = new Test09();
t.MapConverterBean();
t.BeanConverterMap();
} static class TestPojo { private String id; private String name; private String password; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public TestPojo(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
} @Override
public String toString() {
return "TestPojo{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", password='" + password + '\'' + '}';
} public TestPojo() {
}
}
}
result:
MapConverterBean => TestPojo{id='1', name='eddie', password='123456'}
BeanConverterMap => {password=123456, name=jenny, id=2}
【Java】Map转换器的更多相关文章
- xml/map转换器,递归设计思路
xml/map转换器 图片:http://pan.baidu.com/s/1nuKJD13 应用场景,为什么要把xml转map?我直接用jdom,dom4j操作不行吗? 如果你了解模板引擎(像velo ...
- xml/map转换器,递归设计思路【纯原】
xml/map转换器 xml转换: xml/map转换器 xml合并: xml合并 snagit图片:http://pan.baidu.com/s/1nuKJD13 git样例: https://gi ...
- java Map实现的cache manager
一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象 import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...
- Java map 详解 - 用法、遍历、排序、常用API等
尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...
- java map遍历、排序,根据value获取key
Map 四种遍历: Map<String,String> map = new HashMap<String, String>(); map.put("one" ...
- java Map常用方法封装
java Map常用方法封装 CreationTime--2018年7月16日15点59分 Author:Marydon 1.准备工作 import java.util.HashMap; impo ...
- Java Map获取key和value 以及String字符串转List方法
一.问题描述 这里描述两个问题: 1.Java Map获取key和value的方法: 2.String字符串转List的方法: 二.解决方法 1.Java Map获取key和value的方法 2. ...
- java map添加另一个map时候 键值对的类型要一致
java map添加另一个map时候 键值对的类型要一致
- java:Map借口及其子类HashMap五,identityHashMap子类
java:Map借口及其子类HashMap五,identityHashMap子类 了解:identityHashMap子类 一般情况下,标准的Map,是不会有重复的key值得value的,相同的key ...
- java:Map借口及其子类HashMap四
java:Map借口及其子类HashMap四 使用非系统对象作为key,使用匿名对象获取数据 在Map中可以使用匿名对象找到一个key对应的value. person: public class Ha ...
随机推荐
- js和.net操作Cookie遇到的问题
Cookie初探1.我理解中的Cookie1.1.Cookie存储位置是客户端的1.2.Cookie存储数据,数据大小也是有限制的 2.Cookie的用法2.1.js对Cookie的操作(网上很多我就 ...
- Git使用(一)
声明: 第一次使用git,只能保证我的方法可以用,肯定不是最简最好的.以后需要用到更多的用法的时候再来这里更新. 说实话,记下来主要是因为自己记性不好,各种配置记不住,都是当备忘录用的,(囧囧囧囧囧) ...
- CONVERT函数----SQL
CONVERT函数是把时间转换成新类型的通用格式,这样方便查询 CONVERT(type,expression,style) type: 例如:varchar(10) 数据库字符串的类型,大小可以自 ...
- JNI 和 socket api
1.JavaVM 和 JNIEnvJNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程 ...
- c# 获取网络流量
public class ip_helper{enum Constants {MAX_INTERFACE_NAME_LEN=256, MAXLEN_PHYSADDR=8,MAXLEN_IFDESCR= ...
- N个数求和
题目: 本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(≤100).随后一行按格式a ...
- 【CodeForces 803 C】Maximal GCD(GCD+思维)
You are given positive integer number n. You should create such strictly increasingsequence of k pos ...
- 【PTA 天梯赛】L2-016. 愿天下有情人都是失散多年的兄妹(深搜)
呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...
- TcpServer 使用简介
1.简介 1) Poco 的 TcpServer 是一个多线程的 Tcp 服务器. 服务器使用 ServerSocket(Poco 的一个用于初始化服务器的socket的类) 来接收链接.Server ...
- 使用百度定位Api获取当前用户登录地址
最近在做一个商城项目,客户想把网站做成类似于美团的效果,切换地区时,内容也跟随变化.这就要首先解决根据用户id获得地址的问题,最终决定使用百度定位(不适用于搭建反向代理的项目) String url ...