0

在这里,我试图从其中一项服务返回 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;
    }

这里 docList 以 JSON 格式给出输出,注意 param : wt=json. 我在 jetty 上使用简单的 JAX-rs jersey 应用程序。如果我尝试将 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>
4

1 回答 1

0

您需要一个库来进行 json<>java 转换。例如,您可以使用Genson

您只需要将 jar 放入您的类路径中,一切都会正常工作。

于 2012-12-19T15:01:42.640 回答