zoukankan      html  css  js  c++  java
  • java rest框架jersey数组单记录问题解决

     JAVA数据接口采用jersey技术,可以返回xml,json等格式,可以根据客户端请求accept,如:Application/json,Application/xml 来得到不同的接口数据,非常好用,可是此框架有个缺陷,就是当返回json,如果是数组,只有一条记录的情况下,会有没[],如:我需要的返回格式是:

    {"items":[{"id":1,"name":"testname"}]}
    

     而接口实际返回的是:

    {"items":{"id":1,"name":"testname"}}
    

     对于这种数组变单对象,常常引起客户端处理异常,解决此问题方法如下:

      在Jersey的拦截器,进行org.codehaus.jackson标准转换,在web.xml中配置修改如下:

     <servlet>
      <servlet-name>test 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>com.test.api;org.codehaus.jackson.jaxrs</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
     </servlet>

    重点是在后面加;org.codehaus.jackson.jaxrs,当然jackson相关jar包也需要引入,否则会发生异常。相关工作做完后,重启项目,返回的json就出现[]了。

    此问题解决后,也解决了json根级目录不能使用数组的问题,比如,我需要返回的是:

    [{"id":1,"name":"testname1"},{"id":2,"name":"testname2"}]

    但实际返回的却是:

    {"id":1,"name":"testname1"},{"id":2,"name":"testname2"}

    加入org.codehaus.jackson标准转换后,此问题也就解决了,返回正常。

    这只是其中一种解决方案,个人觉得这个比较简单容易,还有重写处理方法的。详见:

    http://stackoverflow.com/questions/2199453/how-can-i-customize-serialization-of-a-list-of-jaxb-objects-to-json/3143214#3143214

  • 相关阅读:
    【poj3017】 Cut the Sequence
    【vijos1243】 生产产品
    【bzoj3624】Apio2008—免费道路
    【bzoj1912】 Apio2010—patrol 巡逻
    【bzoj2006】 NOI2010—超级钢琴
    【bzoj1178】 Apio2009—CONVENTION会议中心
    【bzoj1503】 NOI2004—郁闷的出纳员
    【bzoj1499】 NOI2005—瑰丽华尔兹
    【poj2823】 Sliding Window
    【poj3264】 Balanced Lineup
  • 原文地址:https://www.cnblogs.com/kinms/p/3566634.html
Copyright © 2011-2022 走看看