我需要将从Solr检索到的数据转换为特定的类,我尝试了3种不同的方法,但每种方法都有一些问题。
方法1:使用第三方库 - JSONUtil。
SolrDocument solrDocument = (SolrDocument) iterator.next();
String jsonString = JSONUtil.toJSON(solrDocument);
EventObject eventObject2 = gson.fromJson(jsonString, EventObject.class);
方法2:直接将solrDocument转换为JsonString。
String jsonString2 = gson.toJson(solrDocument);
EventObject eventObject3 = gson.fromJson(jsonString2, EventObject.class);
方法3:将solrDocument转换为JSONObject,然后转换为JsonString。
JSONObject object = new JSONObject(solrDocument);
String jsonStringFromJsonObject = object.toString();
EventObject eventObjectFromJsonObject = gson.fromJson(jsonStringFromJsonObject, EventObject.class);
方法4:使用Java Bean
List<EventObject> EventObjects = response.getBeans(EventObject.class);
Method1 的结果无法处理 Date 或 ArrayList Type的字段。 Method2 , Method3 和 Method4 的结果完全相同,它们可以很好地处理所有字段,但 ArrayList 领域仍然是空的。
我的Solr架构如下(仅提及无法正确转换的2个字段):
<dynamicField name="*_Image_Infos" type="string" indexed="true" stored="true" required="false" multiValued="true" />
<dynamicField name="*_ss" type="string" indexed="true" stored="true" required="false" multiValued="true" />
我的EventObject如下:
public List<EventObjectImageInfo> ImageInfos = new ArrayList<EventObjectImageInfo>();
public List<EventObjectColor> Colors = new ArrayList<EventObjectColor>();
EventObjectImageInfo &amp; EventObjectColor 是我自己的类。
我做错了什么吗?或者我还有其他办法吗?谢谢!
答案 0 :(得分:2)
您可以使用Solr JavaBeans
让我们说我有solr架构:
microservice
我有学生班
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="name" type="string" indexed="false" stored="true"/>
<field name="marks" type="long" multiValued="true" indexed="true" stored="true"/>
现在我可以使用javabeans将SolrDocumentList转换为List
public class Student {
@Field
String id;
@Field
String name;
@Field
ArrayList<Long> marks;
}