我正在为 JsonSchema 使用库 com.fasterxml.jackson 库,我正在创建一个 IntegerSchema 对象,当我使用以下代码设置整数模式的范围时:
main(){
IntegerSchema intSchema = new IntegerSchema();
// setMaximum accepts Double object
intSchema.setMaximum(new Double(102000000));
// setMaximum accepts Double object
intSchema.setMinimum(new Double(100));
printJsonSchema(intSchema);
}
public void printJsonSchema(JsonSchema schema){
ObjectMapper mapper = new ObjectMapper();
try {
logger.info(mapper.writeValueAsString(schema));
} catch (JsonProcessingException e) {
throw new IllegalStateException(e);
}
}
当我使用 ObjectMapper 将 IntegerSchema 转换为字符串时,得到以下响应:
{"type":"integer","maximum":1.02E8,"minimum":100.0}
最大值和最小值正在转换为科学记数法。
但我需要非科学记数法的输出如下:
{"type":"integer","maximum":102000000,"minimum":100}
我无法更改 IntegerSchema 类。
请建议如何在不扩展 IntegerSchema 类的情况下获得所需的输出?
提前致谢
原文由 Abhij 发布,翻译遵循 CC BY-SA 4.0 许可协议
我相信这是一个java问题。如果你调试你的程序,你的 Double 将始终科学地显示,所以我们想要的是将它强制转换为 String。这可以在 Java 中以多种方式实现,您可以在这里查看:
如何使用 Java 在没有科学记数法的情况下打印双精度值?
关于你关于杰克逊的具体问题,我已经为你写了一些代码:
诀窍是为您的 Double 值注册一个自定义序列化程序。这样,您就可以控制自己想要的东西。
我正在使用 BigDecimal 值来创建 Double 的字符串表示形式。然后输出变为(对于特定示例):
我希望这能解决你的问题。
阿图尔