使用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
包含在此类中的标准序列化程序:org.codehaus.jackson.map.ser.StdSerializers
相关部分是这个方法:
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("number", true);
}
长话短说:是否可以覆盖标准序列化程序,或者我是否需要进入并破解我生成的输出?