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