使用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);
}
长话短说:是否可以覆盖标准序列化程序,还是我需要进入并破解生成的输出?
答案 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