用 cxf 默认的 jettsion 方式转 json,有莫名的许多问题,比如一个空的列表,不输出,导致 easyUi 的 dataGrid 找不到 rows 返回值,出现错误。
折腾了许久,最后换成了 jackson2.3.3 ,终于输出了空列表。
{"ret":0,"err":0,"msg":null,"rows":[],"total":0}
以下是配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <import resource="classpath*:META-INF/cxf/cxf.xml" /> <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /> <util:list id="jsonKeys"> <value>datas</value> <value>rows</value> <value>details</value> <value>pubtaxbl2pf</value> </util:list> <util:list id="jsonTypes"> <value>application/json</value> <value>application/jackson</value> <!-- <value>application/jettison</value> --> </util:list> <bean id="jacksonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"> <!-- <property name="serializeAsArray" value="true"/> --> <!-- <property name="arrayKeys" ref="jsonKeys"/> --> <!-- <property name="produceMediaTypes" ref="jsonTypes"/> --> <!-- <property name="consumeMediaTypes" ref="jsonTypes"/> --> <!-- <property name="ignoreNamespaces" value="true"/> --> <!-- <property name="dropRootElement" value="true"/> --> <!-- <property name="ignoreMixedContent" value="true"/> --> <!-- <property name="attributesToElements" value="true"/> --> <!-- <property name="writeNullAsString" value="false"/> --> <!-- <property name="readNullAsString" value="false"/> --> <!-- <property name="writeXsiType" value="false"/> --> <!-- <property name="readXsiType" value="false"/> --> <!-- <property name="ignoreEmptyArrayValues" value="false"/> --> </bean> <!-- <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"> <property name="serializeAsArray" value="true"/> <property name="arrayKeys" ref="jsonKeys"/> <property name="produceMediaTypes" ref="jsonTypes"/> <property name="consumeMediaTypes" ref="jsonTypes"/> <property name="ignoreNamespaces" value="true"/> <property name="dropRootElement" value="true"/> <property name="ignoreMixedContent" value="true"/> <property name="attributesToElements" value="true"/> <property name="writeNullAsString" value="false"/> <property name="readNullAsString" value="false"/> <property name="writeXsiType" value="false"/> <property name="readXsiType" value="false"/> <property name="ignoreEmptyArrayValues" value="false"/> </bean> --> <jaxrs:server id="restApiResource" address="/"> <jaxrs:serviceBeans> <ref bean="taskServiceResource"/> <ref bean="pubTaxbl1pfResource"/> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="jacksonProvider"/> </jaxrs:providers> <jaxrs:extensionMappings> <entry key="json" value="application/json"/> <!-- <entry key="xml" value="application/xml"/> --> </jaxrs:extensionMappings> </jaxrs:server> </beans>