抛弃 / 在编组时将字符串转换为整数

5

Jettison有一个‘特性’,在2008年的JIRA条目中概述了以下问题:

假设我要求“element”的值为“00102”; 输出可能如下所示:

{ "Response": 
    { "element": "00102" }
}

但现在我将"element"设为"102":

{ "Response":
    { "element": 102 }
}

我知道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>

这部分解决了问题,即使明确为整数的元素也被强制转换为字符串。现在,至少我知道我的数据结构会保持什么样子,元素类型不会在未知情况下从字符串变为整数再变回来。

问题

然而,现在我无法将另一个元素输出为整数,即使我希望如此。似乎我只能在整个服务中强制将所有元素的输出转换为字符串,而不能按元素单独设置。

除了使用Jackson的建议(我无法遵循,因为该框架明确使用Jettison),还有其他方法可以指定我希望强制作为字符串输出的元素吗?


“这个框架明确地使用Jettison” <-- 哪个框架? - fge
公司内部框架 - Ron
1个回答

1
< p > 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;
    }
}

你可以在这里查看DefaultConverter的完整代码here 还有CXF的配置
<bean id="myConverter" class="MyConverter"/>

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接