JSON स्कीमा JSON आधारित फॉर्मेट के लिए एक स्पेसिफिकेशन है जो JSON डेटा की संरचना को परिभाषित करता है। JsonSchema क्लास एक दिए गए एप्लिकेशन के लिए आवश्यक JSON डेटा के लिए कॉन्ट्रैक्ट प्रदान कर सकती है और इसके साथ कैसे इंटरैक्ट करना है। JsonSchema JSON डेटा के वैलिडेशन, डॉक्यूमेंटेशन, हाइपरलिंक नेविगेशन, और इंटरैक्शन कंट्रोल को परिभाषित कर सकता है। हम JsonSchemaGenerator के generateSchema() मेथड का उपयोग करके JSON स्कीमा जनरेट कर सकते हैं, यह क्लास JSON स्कीमा जनरेशन फंक्शनैलिटी को रैप करती है।
सिंटैक्स
public JsonSchema generateSchema(Class<T> type) throws JsonMappingException
उदाहरण
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.JsonSchemaGenerator;
import java.util.List;
public class JSONSchemaTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper jacksonObjectMapper = new ObjectMapper();
JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(jacksonObjectMapper);
JsonSchema schema = schemaGen.generateSchema(Person.class);
String schemaString = jacksonObjectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(schema);
System.out.println(schemaString);
}
}
// Person क्लास
class Person {
private String name;
private int age;
private List<String> courses;
private Address address;
// गेटर्स...
public String getName() { return name; }
public int getAge() { return age; }
public List<String> getCourse() { return courses; }
public Address getAddress() { return address; }
}
// Address क्लास
class Address {
private String firstLine;
private String secondLine;
private String thirdLine;
public String getFirstLine() { return firstLine; }
public String getSecondLine() { return secondLine; }
public String getThirdLine() { return thirdLine; }
}
आउटपुट
{
"type" : "object",
"id" : "urn:jsonschema:Person",
"properties" : {
"name" : { "type" : "string" },
"age" : { "type" : "integer" },
"address" : {
"type" : "object",
"id" : "urn:jsonschema:Address",
"properties" : {
"firstLine" : { "type" : "string" },
"secondLine" : { "type" : "string" },
"thirdLine" : { "type" : "string" }
}
},
"course" : {
"type" : "array",
"items" : { "type" : "string" }
}
}
}
JSON स्कीमा ड्राफ्ट वर्जन्स
- ड्राफ्ट 4: डिफ़ॉल्ट (पुराने Jackson वर्जन्स)
- ड्राफ्ट 6/7: नए वर्जन्स, अधिक फीचर्स
- ड्राफ्ट 2019-09 / 2020-12: लेटेस्ट स्टैंडर्ड्स
मॉड्यूल निर्भरता (Maven)
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>2.15.0</version>
</dependency>
स्कीमा जनरेशन विकल्प
JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);
// ऑप्शनल कॉन्फिगरेशन
generator.setDefaultRequired(true); // सभी फील्ड्स को required बनाएं
generator.setGenerateRequiredProperties(true);
JsonSchema schema = generator.generateSchema(Person.class);
स्कीमा वैलिडेशन
// Jackson के साथ वैलिडेशन (एडिशनल लाइब्रेरी आवश्यक)
<dependency>
<groupId>com.networknt</groupId>
<artifactId>json-schema-validator</artifactId>
<version>1.0.0</version>
</dependency>
JsonSchema schema = ...;
JsonValidator validator = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V201909)
.getSchema(schemaNode);
Set<ValidationMessage> errors = validator.validate(jsonNode);
उपयोग के मामले
- API डॉक्यूमेंटेशन: OpenAPI/Swagger के साथ ऑटो-जनरेशन
- क्लाइंट वैलिडेशन: फ्रंटएंड फॉर्म वैलिडेशन
- कॉन्ट्रैक्ट टेस्टिंग: प्रोड्यूसर/कंज्यूमर कॉन्ट्रैक्ट वेरिफिकेशन
- डेटा गवर्नेंस: डेटा क्वालिटी नियम लागू करना
- कोड जनरेशन: स्कीमा से POJO जनरेट करना
सीमाएं
- सभी Jackson एनोटेशन्स सपोर्टेड नहीं (@JsonView, @JsonFilter, आदि)
- पॉलीमॉर्फिज्म (@JsonSubTypes) सीमित सपोर्ट
- कस्टम सीरियलाइज़र्स/डीसीरियलाइज़र्स प्रतिबिंबित नहीं हो सकते
- एडवांस्ड वैलिडेशन (पैटर्न, मिन/मैक्स, आदि) के लिए मैन्युअल एन्हांसमेंट आवश्यक