3

文字列が数字のように見える場合。111 CXF は文字列ではなく数値として返します。

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

ご覧のとおり、JSON プロバイダーを使用しています。正しい JSON 文字列を配信するには、どうすれば強制できますか?

{object:{"name":"111"}} instead of {object:{"name":111}}

前もって感謝します...

4

2 に答える 2

5

JSONProvider に SimpleConverter を追加して、文字列を数値に変換しないようにすることができます。デフォルトでは、DefaultConverter を使用します。ただし、関連する Bean がフィールドの文字列型であることを確認してください。

<bean id="simpleConverter" class="org.codehaus.jettison.mapped.SimpleConverter"/>

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
    <property name="typeConverter" ref="simpleConverter"/>
</bean>

この不具合の詳細については、Jettison http://jira.codehaus.org/browse/JETTISON-61 http://jira.codehaus.org/browse/JETTISON-36を参照してください。

于 2013-01-11T11:32:53.910 に答える
4

編集: これは Jettison のバグのようです。org.apache.cxf.jaxrs.provider.json.JSONProvider は、この問題の原因となった Jettison を使用します。Jackson providerを使用すると、この問題はなくなります。

以下を jaxrs:server の下の beans.xml に追加します。

     <jaxrs:providers>
                <ref bean="jacksonProvider" />
        </jaxrs:providers>

.

そして、ルートの子として直接以下を実行します。

<bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">

</bean>

JSON 仕様に従って、数値を値として使用できます。その抜粋は次のように述べています。

2.1. 値

JSON 値は、オブジェクト、配列、数値、文字列、または次の 3 つのリテラル名のいずれかでなければなりません:

  false null true

仕様に記載されている例を次に示します。

   {
      "Image": {
          "Width":  800,
          "Height": 600,
          "Title":  "View from 15th Floor",
          "Thumbnail": {
              "Url":    "http://www.example.com/image/481989943",
              "Height": 125,
              "Width":  "100"
          },
          "IDs": [116, 943, 234, 38793]
        }
   }

実際に文字列が必要な場合は、おそらくリソース クラスと関連する Bean クラスを調べて、フィールド タイプが正しいことを確認します。

于 2012-06-07T14:35:02.063 に答える