gpt4 book ai didi

java - BigDecimal 在 soap 消息中有科学记数法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:44 27 4
gpt4 key购买 nike

我的网络服务出现了奇怪的问题。我有对象 OrderPosition,它有一个价格(xsd:decimal with fractionDigits = 9)。 Apache CXF 为我生成代理类,这个字段是 BigDecimal。当我想发送大于 10000000.00000 的值时,soap 消息中的此字段已使用科学计数法(例如 1.1423E+7)。

我如何强制该值未以科学记数法发送。

最佳答案

这是可以做到的一种方法。

BigDecimal 有一个将输入数字作为字符串的构造函数。这在使用时会在调用其 .toString() 方法时保留输入格式。例如

BigDecimal bd = new BigDecimal("10000000.00000");
System.out.println(bd);

将打印 10000000.00000

这可以在 Jaxb XmlAdapters 中利用。 Jaxb XmlAdapters 提供了一种方便的方式来控制/自定义编码/解码过程BigDecimmal 的典型适配器如下所示。

public class BigDecimalXmlAdapter extends XmlAdapter{

@Override
public String marshal(BigDecimal bigDecimal) throws Exception {
if (bigDecimal != null){
return bigDecimal.toString();
}
else {
return null;
}
}

@Override
public BigDecimal unmarshal(String s) throws Exception {
try {
return new BigDecimal(s);
} catch (NumberFormatException e) {
return null;
}
}
}

这需要在 Jaxb 上下文中注册。 Here is the link有完整的例子。

关于java - BigDecimal 在 soap 消息中有科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115521/

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