java - 编码时 Jettison/String 以整数形式返回

标签 java json jettison

Jettison 有一个“功能”,在 JIRA entry 中进行了概述。回到 2008 年,它指的是以下问题:

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

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

但现在我将“元素”设置为“102”:

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

我知道 Jettison 正在努力提供帮助...但说真的,我不需要它来代表我决定这类事情。不,谢谢。

当前的解决方法

目前,我使用了用户 here 概述的解决方案,他将以下内容添加到 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)之外,还有其他方法可以指定我想在 JSON 输出中强制将哪些元素作为字符串吗?

最佳答案

SimpleConverter 还将 double 和 boolean 值转换为字符串,这是一个问题。

您只能为您的“特殊”号码覆盖默认转换器。不幸的是,无法查看要转换的原始字段的上下文

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>

关于java - 编码时 Jettison/String 以整数形式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379082/

相关文章:

java - 一个 JMenuBar 和多个 JPanel

java - 将 ISO8601 日期时间转换为另一种基于 Java 中的州名称的 ISO8601 格式?

java - 在 Apache Tomcat 中使用唯一线程

java - SimpleJson : String to JSONArray

java - 通过 Jettison 将 Java 对象(不带 @XmlRootElement)编码为 JSON

java - 使用配置动态创建Cipher : What parameters are necessary?

json - breezejs - 无模式的复杂属性

java - 如何从 JSON (Jackson) 反序列化 Hibernate 实体而不创建 DTO 对象

javascript - Json.Stringify 弄乱了我的日期对象

java - 帮助使用 Jettison 将 JSON Twitter 答案映射到 Jaxb