2012-12-19 55 views
0

在這裏,我試圖從服務的一個返回JSON返回JSON,但它往往錯誤:錯誤使用簡單澤西應用

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 
*/* -> 

這裏是我的程序:

import org.apache.solr.common.SolrDocumentList; 

    @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); 
     try { 
      SolrQuery query = new SolrQuery(createQuery(arr)); 
      query.setIncludeScore(false); 
      query.setFields("age_group,last_name,fav_count,first_name"); 
      query.setParam("wt", "json"); 
      System.out.println(query); 
      QueryResponse qr = authorSearcher.query(query); 
      if (qr != null) { 
       docList = qr.getResults(); 
      } 
     } catch (SolrServerException ex) { 
      sLog.error(); 
     } 
     return docList; 
    } 

這裏文檔列表以JSON格式給出輸出,注意參數:wt = json。我在碼頭上使用簡單的JAX-rs球衣應用程序。 如果我嘗試將docList作爲字符串返回,它會返回一個期望的結果,但JSON返回失敗。

我的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>cribservice</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <url-pattern>/webresources/*</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
+0

如何JSON對象轉換返回到: com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider $應用 com.sun.jersey.json.impl.provider.entity.JSONArrayProvider $應用 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 – Harshit

回答

0

你需要一個庫做的JSON <> Java的轉換。例如,您可以使用Genson

你只需要將jar放入你的類路徑中,一切都應該工作。

+0

是否實現了所需的MessageBodyWriter解決問題,是第三方庫只能解決這個問題 – Harshit

+0

docList給出了JSON,爲什麼我還需要做另一次轉換? – Harshit