Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止JAXB将字符串转换为数字(JSON)_Java_Json_Spring_Jaxb_Formatting - Fatal编程技术网

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

Java 防止JAXB将字符串转换为数字(JSON),java,json,spring,jaxb,formatting,Java,Json,Spring,Jaxb,Formatting,我正在使用JAXB注释创建JSON对象。此外,我使用的是Spring 3.2.4。 我遇到的问题是,我有一个属性“String anId;”,它被指定为@XmlElement。如果此属性包含类似于“123.0”的值,则返回给我的结果JSON为: {"anId":123} 而不是我想要的 {"anId":"123.0"} 0是有意义的,我不能将其舍入/截断。我已尝试通过执行以下操作来解决此问题: @XmlJavaTypeAdapter annotation with a

我正在使用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)
带有XmlAdapter的XmlJavaTypeAdapter注释 添加@XmlSchemaType(name=“string”) @XmlElement(name=“anId”,type=String.class) 然而,这些都没有解决问题。注意:将ID指定为字符串的原因是“1234”有效,“1234.0”有效,“abc123”也是ID的潜在有效值

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

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

编辑2:问题似乎是因为我使用了抛弃作为JSON转换器。切换到Jackson解决了这个问题。

规范本身不包括JSON绑定。有:

  • 将其作为扩展提供的实现(例如EclipseLink MOXy,示例:)
  • 支持JAXB注释的JSON绑定库(如Jackson、Genson等)
  • 将JSON转换为StAX事件或从StAX事件转换为JSON的库(即Jettinson和StAXON),以便可以使用XML绑定库生成消费JSON(例如:)
  • 我假设你属于第三种情况。您看到的行为是因为这些库只接收characters事件。这意味着他们只需要获取
    字符串
    123.0
    ,并需要选择如何在JSON中呈现它。因为他们没有其他选择,所以他们用他们认为最好的JSON格式来渲染它。


    最终的解决方案需要确认上述哪些场景反映了您的情况。前两个选项将能够解决您的用例。

    您是否尝试过使用@XmlAttribute而不是@XmlElement

    另外,您是否用accessor类型(即@xmlacessortype(xmlacesstype.FIELD))注释了该类


    我倾向于将字段类型与xmlattribute一起使用,我没有问题。

    这确实解决了问题,但现在它将结果JSON中的属性名称重写为{@anId:“603.0”}。不幸的是,我不确定它是如何转换为JSON的。基本上,我的控制器类中有一个方法,它有一个“@products(MediaType.APPLICATION_JSON)”注释,并返回一个“javax.ws.rs.core.Response”对象。它通过返回Response.status(200).entity(_MY_JAXB_ANNOTATED_VO.build()的实例_)返回对象;发现我显然在使用抛弃。我将通过这条线索进行调查。谢谢。改为使用Jackson,确实解决了这个问题。非常感谢。