0

SOLRDocList タイプの JSON を返そうとしています:

{numFound=0,start=0,docs=[]}{"start":0,"empty":true,"class":"class org.apache.solr.common.SolrDocumentList","numFound":0}

ただし、 Service クラスを次のように使用しているため:

@POST
@Path("/userQuery")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public SolrDocumentList userQuery(String p){  
  int sizy;
  String stry;
  StringBuilder sb = new StringBuilder();
  SolrDocument doc = null;
  SolrDocumentList docList = null;

  List<String> arr = new ArrayList();
  StringTokenizer token = new StringTokenizer(p,",");
  while(token.hasMoreElements()){
      stry = token.nextToken();
      arr.add(stry);
  }

  Set<String> xrr = new HashSet<String>(arr);

      SolrQuery query = new SolrQuery(createQuery(arr));
      query.setIncludeScore(false);
      query.setFields("country_code,last_name,raw_location");
      query.setParam("wt", "json");
      System.out.println(query);
      QueryResponse qr = authorSearcher.query(query);
      docList = qr.getResults();

  return docList;
}
Error is :
SEVERE: A message body writer for Java class org.apache.solr.common.SolrDocumentList, and Java type class org.apache.solr.common.SolrDocumentList, and MIME media type application/json was not found
SEVERE: The registered message body writers compatible with the MIME media type are:
application/json ->
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->

この問題を解決するために、JSON である SOLRDocList タイプをサポートされているタイプに変換する方法があるかどうかを知りたいですか? 御時間ありがとうございます !

4

1 に答える 1

0

私は solr4j を使用しているため、このライブラリは JSON を出力としてサポートしていません。このような状況では、外部ライブラリまたは :

Map<Integer,Object> solrDocMap = new HashMap<Integer,Object>();
              int counter = 1;
              for(Map singleDoc: docList)
              {
                  solrDocMap.put(counter, new JSONObject(singleDoc));
                  counter++;
              }
              try {
                  returnResults.put("docs",solrDocMap);
                    }

サードパーティのライブラリを使用する代わりに JSON 文字列を返したい場合は、次のようにします。

  String x = ""+returnResults;
  return x;
于 2012-12-20T12:43:42.337 に答える