/** * 應(yīng)用反射(其實(shí)工具類底層一樣用的反射技術(shù)) * 手動(dòng)寫一個(gè) Bean covert to Map */
public static void autoBeanToMap(Map map, Object clazz){
Method[] methods=clazz.getClass().getMethods();
try {
for(Method method: methods){
String methodName=method.getName();//反射獲取屬性與屬性值的方法很多怪得,以下是其一葱她;也可以直接獲得屬性随常,不過獲取的時(shí)候需要用過設(shè)置屬性私有可見
? ? ? ? ?if (methodName.contains("get")){
//invoke 執(zhí)行g(shù)et方法獲取屬性值
? ? ? ? ? ? ? ? Object value=method.invoke(clazz);
//根據(jù)setXXXX 通過以下算法取得屬性名稱
? ? ? ? ? ? ? ? String key = methodName.substring(methodName.indexOf("get") +3);
Object temp = key.substring(0,1).toString().toLowerCase();
key = key.substring(1);
//最終得到屬性名稱
? ? ? ? ? ? ? ? key = temp + key;
map.put(key,value);
}
}
}catch (Exception e){
log.error("錯(cuò)誤信息:",e);
}
log.info(JSONObject.toJSONString(map));
}
public static void main(String[] args) {
try {
//beanToMap();
? ? ? ? User user=new User();
Map keyValues=new HashMap<>();
user.setPassword("password");
user.setComments("test method!");
user.setUserName("wang shisheng");
user.setCreateTime("2018-12-12");
autoBeanToMap(keyValues,user);
}catch (Exception e) {
e.printStackTrace();
}
}
jar:
<dependency>
????<groupId>commons-beanutils</groupId>
????<artifactId>commons-beanutils</artifactId>
????<version>1.9.3</version>
</dependency>