如果字符串看起来像数字,例如。 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}}
提前致谢...
答案 0 :(得分:6)
您可以将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
答案 1 :(得分: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]
}
}
如果你真的想要一个String,那么你可能会查看你的资源类和相关的bean类,以确保字段类型是正确的!