SolrDocument与实体类转换
来源:互联网 发布:java中连续声明变量 编辑:程序博客网 时间:2024/06/09 16:09
/** * * SolrDocument与实体类转换 * * @param document * SolrDocument对象 * @param clzz * 泛型类 * @return <T> */ public static <T> T solrDocumentToPojo(SolrDocument document, Class<T> clzz) { if (null != document) { try { Object obj = clzz.newInstance(); Method m = null; Class<?> fieldType = null; for (String fieldName : document.getFieldNames()) { //需要说明的是返回的结果集中的FieldNames()比类属性多 Field[] filedArrays = clzz.getDeclaredFields(); //获取类中所有属性 for (Field f : filedArrays) { //如果实体属性名和查询返回集中的字段名一致,填充对应的set方法/*if(fieldName.equals("_id")){ fieldName="id"; }*/ if(f.getName().equals(fieldName)){ //获取到的属性名 f = clzz.getDeclaredField(fieldName); //属性类型 fieldType = f.getType(); //构造set方法名 setId String dynamicSetMethod = dynamicMethodName(f.getName(), "set"); //获取方法 m = clzz.getMethod(dynamicSetMethod, fieldType); //获取到的值 // 如果是 int, float等基本类型,则需要转型 if (fieldType.equals(Integer.TYPE)) { fieldType = Integer.class; } else if (fieldType.equals(Float.TYPE)) { fieldType = Float.class; } else if (fieldType.equals(Double.TYPE)) { fieldType = Double.class; } else if (fieldType.equals(Boolean.TYPE)) { fieldType = Boolean.class; } else if (fieldType.equals(Short.TYPE)) { fieldType = Short.class; } else if (fieldType.equals(Long.TYPE)) { fieldType = Long.class; } else if(fieldType.equals(String.class)){ fieldType = String.class; }else if(fieldType.equals(Collection.class)){ fieldType = Collection.class; } m.invoke(obj, fieldType.cast(document.getFieldValue(fieldName))); } } } return clzz.cast(obj); } catch (ClassCastException e) {// 请检查schema.xml中的各个field的数据类型与PO类的是否一致 e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) {//请检查PO类中的field对应的各个setter和getter是否存在 e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (NoSuchFieldException e) {//请检查schema中的field是否不存在于PO类中 e.printStackTrace(); } } return null; }//动态构造getXxx setXxxpublic static String dynamicMethodName(String name, String setOrGet){ String setMethodName = setOrGet + name.substring(0, 1).toUpperCase() + name.substring(1); return setMethodName; }
阅读全文
0 0
- SolrDocument与实体类转换
- 实体类与xml互相转换通用
- dataset与实体类的转换
- 实体类与xml互相转换通用
- DataTable与实体类互相转换
- DataTable与实体类互相转换
- SolrDocument转换成Bean、SolrDocumentList转换成BeanList
- jdom实体与XML转换
- 实体类转换
- ASP.NET JSON字符串与实体类的互转换
- 关于实体类对象与XML的转换
- 关于实体类对象与XML的转换
- XML文件与实体类之间的互相转换
- ASP.NET JSON字符串与实体类的互转换
- 关于实体类对象与XML的转换
- XML与实体类,DataTable,List之间进行转换
- json与java实体类的相互转换
- C#实现实体类与字符串互相转换的方法
- python打不开数据集(有歧义的文件名)
- Android之camera架构---open之指定ID
- 以例子给出CRF的理解
- Windows 10系统MarkdownPad2 预览失败
- 【重磅】MDA以24亿美元终将DigitalGlobe收入囊中
- SolrDocument与实体类转换
- 欢迎使用CSDN-markdown编辑器
- Linux下的lds链接脚本简介(一)
- Android WebView显示net::ERR_PROXY_CONNECTION_FAILED解决办法
- bootstrap3 兼容ie8
- union和union all区别
- bzoj 1227: [SDOI2009]虔诚的墓主人
- CPU的基本知识与使用方法
- 云CRM与传统CRM你会选择哪个?