繁体   English   中英

Jackson ObjectMapper将“长” java类型视为“数字”,而不是“整数”

[英]Jackson ObjectMapper treats “long” java types as “number” instead of “integer”

使用org.codehaus.jackson.map.ObjectMapper (不是数据绑定版本!)我正在从以下对象生成json模式:

public class MyModelObject {    
    private long fileSize;
    //... other properties, getters, setters etc
}

使用以下代码:

ObjectMapper mapper = new ObjectMapper();
JsonSchema schema = mapper.generateJsonSchema(clazz);
String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);

我得到以下架构(下至相关部分):

{
  "type" : "object",
  "properties" : {
    "fileSize" : {
      "type" : "number"
    }
  }
}

“数字”不是long的最好表示,因为当我在其他地方尝试从该模式生成pojos时,我得到的是“ double”而不是“ long”(甚至可以是“ int”)。

据此,json中有一个“整数”数据类型可以更好地满足我的需求: http : //spacetelescope.github.io/understanding-json-schema/reference/numeric.html

但是,通过深入研究jackson-mapper模块的源代码,我发现它们使用的是LongSerializer包含的称为LongSerializer的标准序列化LongSerializerorg.codehaus.jackson.map.ser.StdSerializers

相关的部分是这种方法:

@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
    return createSchemaNode("number", true);
}

长话短说:是否有可能覆盖标准的串行器,还是我需要进入并破解我的生成的输出?

您似乎正在使用旧版本的Jackson。 建议您首先尝试使用Jackson2,并在此处获取最新版本: https ://maven-repository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.5.0

似乎新的json模式模块可能对整数做了正确的事情: https : //github.com/FasterXML/jackson-module-jsonSchema/blob/master/src/main/java/com/fasterxml/jackson/module/ jsonSchema /类型/ IntegerSchema.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM