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

时间:2015-01-13 18:59:56

标签: java json jackson jsonschema jackson-modules

使用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"
    }
  }
}

"数"并不是最好的代表,因为当我在其他地方试图从模式中生成pojos时,我得到了" double"而不是" long" (甚至" int"没问题。)

根据这个,有一个"整数" json中的数据类型更适合我的需求: http://spacetelescope.github.io/understanding-json-schema/reference/numeric.html

但是通过挖掘jackson-mapper模块的源代码,我发现他们正在使用此类中包含的名为LongSerializer的标准序列化器:org.codehaus.jackson.map.ser.StdSerializers

相关部分是这种方法:

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

长话短说:是否可以覆盖标准序列化程序,还是我需要进入并破解生成的输出?

1 个答案:

答案 0 :(得分:0)

看起来你正在使用旧版本的杰克逊。建议您先试用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/types/IntegerSchema.java