将Jackson ObjectMapper类设置为不使用双重科学记数法

我正在为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类的情况下获得所需的输出?

提前致谢

我相信这是一个java问题。 如果您调试程序,您的Double将始终以科学方式显示,因此我们需要将其强制为String。 这可以通过多种方式在Java中实现,您可以在这里查找:

如何使用Java在没有科学记数法的情况下打印双值?

关于你关于jackson的具体问题,我已经为你写了一些代码:

 public class ObjectMapperTest { public static void main(String[] args) throws JsonProcessingException { IntegerSchema schema = new IntegerSchema(); schema.type = "Int"; schema.max = 10200000000d; schema.min = 100d; ObjectMapper m = new ObjectMapper(); System.out.println(m.writeValueAsString(schema)); } public static class IntegerSchema { @JsonProperty String type; @JsonProperty double min; @JsonProperty @JsonSerialize(using=MyDoubleDesirializer.class) double max; } public static class MyDoubleDesirializer extends JsonSerializer { @Override public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException { // TODO Auto-generated method stub BigDecimal d = new BigDecimal(value); gen.writeNumber(d.toPlainString()); } } } 

诀窍是为Double值注册自定义Serializer。 这样,您就可以控制自己想要的内容。

我使用BigDecimal值来​​创建Double的String表示。 然后输出变为(对于特定示例):

 {"type":"Int","min":100.0,"max":10200000000} 

我希望能解决你的问题。

阿图尔

Feature.WRITE_BIGDECIMAL_AS_PLAIN为您的Object Mapper设置此项