Ron*_*Ron 5 java json jettison
有一个Jettison的"功能",在2008年的JIRA入门中概述,其中涉及以下问题:
假设我要求"元素"的值为"00102"; 输出可能如下所示:
{ "Response":
{ "element": "00102" }
}
Run Code Online (Sandbox Code Playgroud)
但现在我将"element"设置为"102":
{ "Response":
{ "element": 102 }
}
Run Code Online (Sandbox Code Playgroud)
我理解Jettison正试图提供帮助......但是说真的,我不需要它代表我来决定这种事情.不,谢谢.
目前的解决方案
目前,我已经使用了用户在此处概述的解决方案,他将以下内容添加到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>
Run Code Online (Sandbox Code Playgroud)
这部分地解决了这个问题,即使所有元素都被强制为字符串,即使它们是明显的整数.现在,至少,我确切地知道我的数据将保持什么结构,并且元素类型不会在不知情的情况下从字符串变为整数然后再返回.
问题
但是,我现在无法输出另一个元素作为整数,即使我现在希望这样做.似乎我只能强制元素的输出在整个服务中强制字符串,而不是基于每个元素.
除了'使用杰克逊'的建议(我不能遵循,因为框架显式使用Jettison)有没有其他方法我可以指定哪些元素我想强制作为我的JSON输出中的字符串?
它们SimpleConverter还将双精度值和布尔值转换为字符串,这是一个问题。
您只能覆盖“特殊”号码的默认转换器。不幸的是,无法查看要转换的原始字段的上下文
public class MyConverter extends org.codehaus.jettison.mapped.DefaultConverter {
public Object convertToJSONPrimitive(String text) {
Object primitive = super.convertToJSONPrimitive(text);
//Apply your conversion rule;
if (primitive != null
&& primitive instanceof Long
&& text.startsWith("0"))
return text;
else
return primitive;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看 DefaultConverter 的完整代码
以及CXF配置
<bean id="myConverter" class="MyConverter"/>
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="typeConverter" ref="myConverter"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |