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

您可以将 SimpleConverter 添加到您的 JSONProvider 中,这样它就不会将字符串转换为数字。默认情况下,它使用 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>

.

并且,以下直接作为root的孩子。

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

</bean>

根据JSON Specification,数字可以作为值。它的摘录说,

2.1。价值观

JSON 值必须是对象、数组、数字或字符串,或以下三个文字名称之一:

  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 回答