簡體   English   中英

如何生成具有所需字段或默認值的 JSON 模式?

[英]How can i generate JSON schema with a required filed or default values?

我使用傑克遜來處理 JSON 對象,我想要一種方法來從我可以對對象強制執行的類生成模式。 我發現我可以使用這個:

JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);
JsonSchema jsonSchema = generator.generateSchema(DBUser.class);
mapper.writeValueAsString(jsonSchema);

使用這個 com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator。
從這個類生成:

public class DBUser {

    private String database="stu";
    private int role;
    private String username;
    private String password;
    //setters and getters defined
    }

這給了我這個:

{
  "type" : "object",
  "id" : "urn:jsonschema:DBUser",
  "properties" : {
    "database" : {
      "type" : "string"
    },
    "role" : {
      "type" : "integer"
    },
    "username" : {
      "type" : "string"
    },
    "password" : {
      "type" : "string"
    }
  }
}

我需要的是這樣的必填字段:

"required": ["database","role","username"]

但它沒有我需要的必填字段或初始值。 那我怎么能得到呢?

您可以使用JsonProperty#required設置為true來注釋您的 pojo DBUser類字段,以生成帶有必填字段的 jsonschema:

public class DBUser {

    @JsonProperty(required = true)
    private String database = "stu";
    @JsonProperty(required = true)
    private int role;
    @JsonProperty(required = true)
    private String username;
    private String password;
}

//generate the new jsonschema with the required fields
JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);
JsonSchema jsonSchema = generator.generateSchema(DBUser.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter()
                         .writeValueAsString(jsonSchema));


//json generated
{
  "type" : "object",
  "id" : "urn:jsonschema:DBUser",
  "properties" : {
    "database" : {
      "type" : "string",
      "required" : true
    },
    "role" : {
      "type" : "integer",
      "required" : true
    },
    "username" : {
      "type" : "string",
      "required" : true
    },
    "password" : {
      "type" : "string"
    }
  }
}

請注意,根據文檔,jsonschema 模塊支持創建 JSON Schema (v3) 而不是更高的 JSON Schema 版本,因此不支持更高版本中引入的關鍵字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM