如何从Java类生成JsonSchema As数组



我正在使用fastasterxml .jackson从Java类生成JsonSchema。生成的json模式如下所示

{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}

生成JsonSchema的代码

public static String getJsonSchema(Class definitionClass) throws JsonProcessingException {
ObjectMapper mapper =  new ObjectMapper().disable(
MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS);
JavaType javaType = mapper.getTypeFactory().constructType(definitionClass);
JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
JsonSchema schema = schemaGen.generateSchema(javaType);
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
}

我尝试使用ArraySchema arraySchema = schema.asArraySchema();,但它生成无效的模式。我期望的JsonSchema应该如下

{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}

TL;博士:getJsonSchema(MyClass[].class)


工作良好,如果我们只是告诉它生成一个Java数组的模式。

为了进行演示,我创建了一个适合所示模式的MyClass类。为了演示的简单性,我使用了public字段,但是在实际生活中我们将使用private字段和publicgetter/setter方法。

class MyClass {
public String id;
public String name;
}

现在,为了显示我们得到了与问题中相同的结果,我们用MyClass.class来调用它:

System.out.println(getJsonSchema(MyClass.class));

输出

{
"type" : "object",
"id" : "urn:jsonschema:MyClass",
"properties" : {
"id" : {
"type" : "string"
},
"name" : {
"type" : "string"
}
}
}

现在,我们希望模式是一个数组,所以我们将使用MyClass[].class来调用它。

System.out.println(getJsonSchema(MyClass[].class));

输出

{
"type" : "array",
"items" : {
"type" : "object",
"id" : "urn:jsonschema:MyClass",
"properties" : {
"id" : {
"type" : "string"
},
"name" : {
"type" : "string"
}
}
}
}

以上使用jackson-module-jsonSchema-2.10.3.jar进行了测试。

相关内容

  • 没有找到相关文章

最新更新