Java 防止JAXB将字符串转换为数字(JSON)
我正在使用JAXB注释创建JSON对象。此外,我使用的是Spring 3.2.4。 我遇到的问题是,我有一个属性“String anId;”,它被指定为@XmlElement。如果此属性包含类似于“123.0”的值,则返回给我的结果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
{"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绑定。有:
字符串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,确实解决了这个问题。非常感谢。