想通过java的反射功能将javaBean
转换成map
:
public static Map<String, String> toMap(Object javaBean) {
Map<String, String> result = new HashMap<>();
Method[] methods = javaBean.getClass().getDeclaredMethods();
for (Method method : methods) {
try {
if (method.getName().startsWith("get")) {
String field = method.getName();
field = field.substring(field.indexOf("get") + 3);
field = field.toLowerCase().charAt(0) + field.substring(1);
Object value = method.invoke(javaBean, (Object[]) null);
String val = "";
if (value != null) {
if (value.getClass().isArray()) {
Object[] array = (Object[]) value;
val = "[";
boolean flag = true;
for (Object o : array) {
if (flag) {
flag = false;
val += o.toString();
} else {
val += ", " + o.toString();
}
}
val += "]";
} else {
val = value.toString();
}
result.put(field, val);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
如果javabean中有整型数组的话,以上程序就无法正常使用了,比如如下的javabean:
public class Student {
private int id;
private String name;
private String desc;
private String[] phones;
private List<String> addresses;
private int[] scores;
//getter and setter ...
其中对scores的转换会遇到问题:java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
请问我该如何处理原始类型的数组?
要用 java.lang.reflect.Array 来处理数组,所以我把 if (value.getClass().isArray()) 那一代码给你改了
if (value.getClass().isArray()) {
int length = Array.getLength(value);
System.out.println(length);
StringBuffer buffer = new StringBuffer();
buffer.append('[');
for (int i = 0; i < length; i++) {
Object v = Array.get(value, i).toString();
buffer.append(v == null ? "<null>" : v.toString())
.append(", ");
}
if (buffer.length() > 1) {
// 大于 1 说明除了 '[' 外还有其它的,即数据不为空
buffer.delete(buffer.length() - 2, buffer.length());
}
buffer.append(']');
val = buffer.toString();
System.out.println(val);
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。