cxf-restはJSonProviderを構成してJSONの変換フォーマットをカスタマイズする
2305 ワード
CXF JSonProviderについて
CXFはJSonProviderでJSonをサポートし、デフォルトのProviderはjettsionで符号化または復号化されます.
CXFは、サービス側であれクライアントであれ、JSonProviderを構成することでJsonのフォーマットを構成できます.
例えばサーバ側
なお、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で直接符号化することもできます.
CXFはJSonProviderでJSonをサポートし、デフォルトのProviderはjettsionで符号化または復号化されます.
CXFは、サービス側であれクライアントであれ、JSonProviderを構成することでJsonのフォーマットを構成できます.
例えばサーバ側
<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で直接符号化することもできます.
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);