gpt4 book ai didi

java - 防止 JAXB 将字符串转换为数字 (JSON)

转载 作者:行者123 更新时间:2023-12-02 09:46:35 25 4
gpt4 key购买 nike

我正在使用 JAXB 注释来创建 JSON 对象。另外我正在使用Spring 3.2.4。我遇到的问题是我有一个属性“String anId;”指定为 @XmlElement。如果此属性包含类似于“123.0”的值,则返回给我的结果 JSON 为:

    {"anId":123}

这与我想要的相反

    {"anId":"123.0"}

.0 是有意义的,我不能将其四舍五入/截断。我尝试通过执行以下操作来解决此问题:

    @XmlJavaTypeAdapter annotation with an XmlAdapter of <String,String>
adding @XmlSchemaType(name="string")
@XmlElement(name="anId",type=String.class)

但是,这些都没有解决问题。注意:ID 被指定为字符串的原因是因为“1234”有效,“1234.0”有效,“abc123”也是该 ID 的潜在有效值。

考虑到这一点,有人知道我如何解决我的问题吗?或者至少可以解释为什么它不断四舍五入数字?

编辑:此外,如果我将值更新为 8 位数字长 (12345678.0),它将返回字符串“12345678.0”。此外,如果我将值更新为以 .00 结尾,它将返回完整数字作为字符串“123.00”。我不知道这是否有帮助,但它使问题更加令我困惑,因为舍入不一致。

编辑 2:看来问题是由于我使用 Jettison 作为 JSON 转换器造成的。切换到 jackson 解决了这个问题。

最佳答案

JAXB (JSR-222)规范本身不涵盖 JSON 绑定(bind)。有:

  1. 将其作为扩展提供的实现(即 EclipseLink MOXy,例如: http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html )
  2. 支持 JAXB 注释的 JSON 绑定(bind)库(即 Jackson、Genson 等)
  3. 将 JSON 与 StAX 事件相互转换的库(即 Jettinson 和 StAXON),以便可以使用 XML 绑定(bind)库来生成使用的 JSON(例如: http://bdoughan.blogspot.com/2011/04/jaxb-and-json-via-jettison.html )。

我假设您属于第三种情况。您看到的行为是因为这些库只接收字符事件。这意味着他们只获取 String 123.0 并需要选择如何以 JSON 形式呈现它。由于他们没有其他选择,因此他们使用他们认为最好的 JSON 格式来呈现它。

最终的解决方案需要确认上述哪种情况反射(reflect)了您的情况。前 2 个选项将能够解决您的用例。

关于java - 防止 JAXB 将字符串转换为数字 (JSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24617764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com