Java'da JSON, yani JavaScript Nesne Gösterimi, sunucu tarafı yanıtının yönetilmesinde çok önemli bir rol oynar. Java'da JSON belgelerini bir JSON şemasına göre doğrulayabiliriz. Doğrulamayı gerçekleştirmek için şunu kullanırız: networknt JSON Şema doğrulayıcı kütüphane.
Bu kütüphanenin kullanılmasının sebebi Jackson'ı JSON kütüphanesi olarak kullanması ve en güncel JSON Schema versiyonunu desteklemesidir. Networknt kütüphanesi bir Java JSON şema doğrulaması için JSON Şema Çekirdek Taslağı v4, v6, v7 ve v2019-09 (örneğimizde kullanıyoruz) spesifikasyonunun uygulanması. Varsayılan JSON ayrıştırıcısı olarak Jackson'a sahiptir.
Öncelikle programımızda doğrulama işlemini gerçekleştirmek için kullandığımız JSON belgesi ve JSON şeması örneğini alıyoruz.
JSON Belgesi
{ 'name': 'Emma Watson', 'artist': 'Paul Walker', 'description': null, 'tags': ['oil', 'famous'] }
JSON şeması
{ '$schema': 'https://json-schema.org/draft/2019-09/schema#', '$id+': 'http://my-paintings-api.com/schemas/painting-schema.json', 'type': 'object', 'title': 'Painting', 'description': 'Painting information', 'additionalProperties': true, 'required': ['name', 'artist', 'description', 'tags'], 'properties': { 'name': { 'type': 'string', 'description': 'Painting name' }, 'artist': { 'type': 'string', 'maxLength': 50, 'description': 'Name of the artist' }, 'description': { 'type': ['string', 'null'], 'description': 'Painting description' }, 'tags': { 'type': 'array', 'items': { '$ref': '#/$defs/tag' } } }, '$defs': { 'tag': { 'type': 'string', 'enum': ['oil', 'watercolor', 'digital', 'famous'] } } }
Pom.xml dosyamıza aşağıdaki bağımlılığı ekliyoruz.
com.networknt json-schema-validator 1.0.42
Ayrıca şunu da kullanabiliriz: org.everit.json JSON nesnesini doğrulamak için kitaplık. Bunu kullanmak için pom.xml dosyamıza aşağıdaki bağımlılığı eklememiz gerekiyor:
org.everit.json org.everit.json.schema 1.11.1
Bizim durumumuzda, şunu kullanıyoruz: ağ bağlantısı Java kütüphanesi.
JSON belgesini doğrulamak için aşağıdaki adımları kullanıyoruz:
- Yeni bir maven projesi oluşturun.
- JSON şema doğrulayıcı bağımlılığını pom.xml dosyamıza ekleyin.
- ObjectMapper'ı kullanarak JSON belgesindeki verileri ve şemayı okuyun.
- JSON belgesini doğrulamak için JsonSchemaFactory'nin validate() yöntemini kullanın.
- Döndürülen sonucu doğrulama setinde saklayın ve ekrana yazdırın.
Artık her şey ayarlandı, böylece JSON belgesini doğrulamanın gerçek kodunu uygulayabiliriz.
JsonValidatorExample.java
//import required classes and packages package javaTpoint.ObjectToJsonConversion; import java.io.InputStream; import java.util.Set; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; // create class to validate JSON document public class JsonValidatorExample { // create inputStreamFromClasspath() method to load the JSON data from the class path private static InputStream inputStreamFromClasspath( String path ) { // returning stream return Thread.currentThread().getContextClassLoader().getResourceAsStream( path ); } // main() method start public static void main( String[] args ) throws Exception { // create instance of the ObjectMapper class ObjectMapper objectMapper = new ObjectMapper(); // create an instance of the JsonSchemaFactory using version flag JsonSchemaFactory schemaFactory = JsonSchemaFactory.getInstance( SpecVersion.VersionFlag.V201909 ); // store the JSON data in InputStream try( InputStream jsonStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\data.json' ); InputStream schemaStream = inputStreamFromClasspath( 'C:\Users\ajeet\eclipse-workspace\schema.json' ) ){ // read data from the stream and store it into JsonNode JsonNode json = objectMapper.readTree(jsonStream); // get schema from the schemaStream and store it into JsonSchema JsonSchema schema = schemaFactory.getSchema(schemaStream); // create set of validation message and store result in it Set validationResult = schema.validate( json ); // show the validation errors if (validationResult.isEmpty()) { // show custom message if there is no validation error System.out.println( 'There is no validation errors' ); } else { // show all the validation error validationResult.forEach(vm -> System.out.println(vm.getMessage())); } } } }
Tanım
Yukarıdaki kodda şunu kullanıyoruz: Sürüm Bayrağı . elde etmek için JsonSchemaFactory , bu sürüm bayrağının yapıcıya iletilmesi gerekir. Bizim durumumuzda kullanıyoruz 2019-09 JSON Şemasının sürümü.
Ayrıca her iki dosyayı da sınıf yolundan yüklemek için özel bir yardımcı yöntem (inputStreamFromClasspath()) kullanırız. JSON verilerini inputStream'den okumak için Jackson ObjectMapper sınıfının bir örneğini oluşturuyoruz. Bundan sonra, bu OutputStream verilerini bir JsonNode nesnesine ayrıştırıyoruz. JsonSchemaFactory örneğini kullanarak, JsonNode'u doğrulamak için JsonSchema nesnesini elde ederiz. Bir veya daha fazla ValidationMessage nesnesi içeren bir dizi doğrulama hatası oluştururuz. Doğrulama hatası olmadığında doğrulama seti boş olacaktır.
Çıktı