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

  • 相关阅读:
    linux 常用快捷键
    命令行远程链接
    mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]
    mybatis延迟加载
    mybatis跨XML引用
    eclipse修改项目名称
    wait, WIFEXITED, WEXITSTATUS
    进程通信中如何进行值得传递?
    fork新建进程
    Ubuntu安装genymotion模拟器步骤
  • 原文地址:https://www.cnblogs.com/kinms/p/3566634.html
Copyright © 2011-2022 走看看