当前位置: 代码迷 >> Java Web开发 >> spring cxf 会合(仅含一个元素)json 不正常 ,
  详细解决方案

spring cxf 会合(仅含一个元素)json 不正常 ,

热度:578   发布时间:2016-04-14 22:35:53.0
spring cxf 集合(仅含一个元素)json 不正常 ,急急急急急急~~~

public class User{
  String id;
  String name;
  //get and set
}

public class Root{
  String returnCode;
  List<User> userList;
  //get and set
}

当root.userList 仅包含一个元素时,Json格式为
{userList:{id:1, name:n}}
两个时格式正常:
{userList:[{id:1, name:n},{id:2, name:n}]}
怎么样让一个元素时,集合外层也含 “[   ]”  ?????
网上说设置:
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="serializeAsArray" value="true" />
</bean>
试过了,没有用,求大神给条出路~~~~

------解决思路----------------------
cxf传递复杂对象挺麻烦的,建议传递xml然后在客户端解析比较好
------解决思路----------------------
不能手动将UserList转成 JsonArray么?
------解决思路----------------------
楼主是输出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
  相关解决方案