cxf-rest 配置JSonProvider 來定制JSON的轉換格式
關于CXF JSonProvider
CXF通過JSonProvider對JSon提供支持,默認的Provider采用jettsion進行編碼或解碼。
無論是服務端還是客戶端,CXF都可以通過配置JSonProvider來配置Json的格式。
比如服務器端
Java代碼 :
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="dropRootElement" value="true"/>
<property name="dropCollectionWrapperElement" value="true"/>
<property name="serializeAsArray" value="true"/>
</bean>
<jaxrs:server id="customerService" address="/service1">
<jaxrs:serviceBeans>
<ref bean="customerBean" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
需要說明的而是,JsonProvider的屬性 dropRootElement 默認為false,則Json格式會將類名作為第一個節點,如
{Customer:{"id":123,"name":"John"}},如果配置為true,則Json格式為{"id":123,"name":"John"},而Gson等Json包會解析格式為后者。
而dropCollectionWrapperElement屬性默認為false,則當遇到Collection時,Json會在集合中將容器中類名作為一個節點,比如{"Customer":{{"id":123,"name":"John"}}},而設置為false,則JSon格式為{{"id":123,"name":"John"}}
而serializeAsArray屬性默認為false,則當遇到Collecion時,格式為{{"id":123,"name":"John"}},如果設置為true,則格式為[{"id":123,"name":"john"}],而Gson等解析為后者。
而對于CXF Client端,同樣設置JSonProvider,可用spring,也可直接編碼
Java代碼 :
JSONProvider myJsonProvider = new JSONProvider();
myJsonProvider.setDropRootElement(true);
myJsonProvider.setSupportUnwrapped(true);
myJsonProvider.setSerializeAsArray(true);
List<JSONProvider> providers = new ArrayList<JSONProvider>();
providers.add(myJsonProvider);
WebClient client = WebClient.create("http://10.148.11.102:8080/testCXFServer",providers);
站長行業門戶(http://www.software8.co/wzjs/java/1685.html)文章,希望大家可以留言建議