解决方案 »

  1.   

    cxf传递复杂对象挺麻烦的,建议传递xml然后在客户端解析比较好
      

  2.   

    不能手动将UserList转成 JsonArray么?
      

  3.   

    楼主是输出json的时候吗,那你替换JSONProvider即可,之前做jaxrs的cxf时做过,你可以自己定义个JSONProvider继承org.apache.cxf.jaxrs.provider.json.JSONProvider只需对public boolean isWriteable(Class<?> type, Type genericType, Annotation[] anns, MediaType mt) ;方法和public void writeTo(T obj, Class<?> cls, Type genericType,Annotation[] anns, MediaType m,MultivaluedMap<String, Object> headers, OutputStream os) throws IOException方法进行重写,isWriteable方法是用来writeTo之前判断是否能输出,writeTo则是真正的输出方法,原来的JSONProvider是用JAXB方式输出json对象的,你可以改成用其他的例如json-lib ,jackson, gson,这种json的标准工具包来序列化输出,jackson的有提供jaxrs的jsonProvider的第三方jar你可以到maven的中心仓库搜jackson-jaxrs就能看到。写好后只需在你spring配置cxf的地方
    <jaxrs:server>
       <jaxrs:providers>
         <ref bean="你的jsonProvider"/>
       </jaxrs:providers>
    </jaxrs:server>
    关于Provider的配置cxf的官网说的非常详细http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-ConfiguringJSONprovider
      

  4.   

      <!--把成员变量配置在此处即可-->
       <util:list id="jsonKeys">
            <value>appList</value>
        </util:list>  
      
        <util:list id="jsonTypes">
            <value>application/json</value>
            <value>application/jettison</value>
        </util:list>  


         <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
            <property name="arrayKeys" ref="jsonKeys" />  
            <property name="serializeAsArray" value="true" />  
            <property name="produceMediaTypes" ref="jsonTypes" />  
            <property name="consumeMediaTypes" ref="jsonTypes" />  
         </bean>