如何让ObjectMapper
为类的生成模式中的一些属性设置format
字段?
我正在尝试使用FasterXml
库为java类生成模式:
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
<scope>compile</scope>
</dependency>
试验:
@SneakyThrows
@Test
public void test() {
ObjectMapper objectMapper = new ObjectMapper();
SchemaFactoryWrapper schemaVisitor = new SchemaFactoryWrapper();
objectMapper.acceptJsonFormatVisitor(objectMapper.constructType(MyClass.class), schemaVisitor);
System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(schemaVisitor.finalSchema()));
}
@Data
public static class MyClass {
private int myInt;
private long myLong;
}
结果是这样的:
{
"type":"object",
"id":"urn:jsonschema:........:MyClass",
"properties":{
"myInt":{
"type":"integer"
},
"myLong":{
"type":"integer"
}
}
}
这两种类型都很好,但我希望为属性myLong
设置"format": "int64"
。
1条答案
按热度按时间mefy6pfw1#
Json Schema没有引入
int64
类型,只有number
和integer
两种类型,看枚举JsonFormatTypes,JsonSchema
模块使用它。要扩展它,您必须扩展大量的类,并以某种方式欺骗内部机制,将integer
替换为int64
,这在最后会生成误导性的模式,这是可以理解的只为你。所有其他库和工具都不能识别它。我建议使用com.fasterxml.jackson.annotation.JsonPropertyDescription
注解long
属性:它会产生这样的结果: