在Jersey 1.5中传递单个元素JSON数组时出错

时间:2011-02-23 08:00:42

标签: json jaxb jersey

我有一个带有BookMeta对象的ArrayList的Books类,arraylist的名字是bookList。

如果bookList拥有多个BookMeta,它在接收数组时对客户端有效。但是如果bookList中只有一个BookMeta对象,则它们不会收到数组,而是获得一个元素。我采取以下解决方法强制输出为一个数组:

@Provider
  public class JaxbContextResolver implements ContextResolver<JAXBContext> {

      private JAXBContext context;
      private Class[] types = {BookMeta.class, Books.class};

      public JaxbContextResolver() throws Exception {
          this.context = new JSONJAXBContext( JSONConfiguration.mapped().arrays("bookList").build(), types);
      }

      public JAXBContext getContext(Class<?> objectType) {
          for (Class type : types) {
             if (type == objectType) {
                  return context;
              }
          }
          return null;
      }
  }

我仍然没有得到阵列。我还该怎么办?我是否需要显式注册Provider类?我在某处读到了它们会被自动检测到。

感谢。

编辑:我使用的是Tomcat 6,我的web.xml看起来像是:

<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping> 

2 个答案:

答案 0 :(得分:0)

搞定了......做了一个愚蠢的错误 - 提交者类必须保存在web.xml中配置的resources文件夹(带有属性com.sun.jersey.config.property.packages)

感谢您的帮助!

答案 1 :(得分:0)

我的课程不在资源文件夹中,而且工作正常。 我必须在arrays()方法中放置一个正确的值。