Используя 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 ИЗ схемы, я получаю «двойное», а не «длинное» (или даже «целое» было бы в порядке).
В соответствии с этим в 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);
}
Короче говоря: возможно ли переопределить стандартные сериализаторы или мне нужно войти и взломать сгенерированный вывод?