tutorial patternproperties dates java json inheritance binding jsonschema

java - patternproperties - tutorial json schema



JSon esquema y herencia (2)

He buscado en el esquema json con enlaces de java con herencia y todas las búsquedas me llevaron al uso de "allOf".

El uso de allOf podría resolver mi problema, pero me pregunto si hay una construcción en el esquema json que pueda usar y que genere mi código java con la herencia java real "B extiende A", en lugar de incluir todas las propiedades de A dentro de B?

Me pregunto si esto es compatible / realizable o si solo estoy soñando. Si no es compatible, me gustaría saber la razón.


OK, bueno, yo soy el autor de ambos:

  • la especificación de validación del esquema JSON actual;
  • y la biblioteca de Java que es la más utilizada para la validación de esquemas JSON en Java hoy en día: json-schema-validator .

Así que puedo responder tu pregunta, y la respuesta básica es no.

¿Por qué? Porque no existe tal cosa como herencia de esquema actualmente definida.

Cuando use allOf , necesita que todos los esquemas en allOf coincidan; y si eres estricto con lo que puede existir en este o ese JSON, habrás agregado propiedades additionalProperties a false . Como tal, no puedes heredar.

La solución real es un mecanismo que propuse para el borrador v5: las palabras clave $merge y $patch . Estos permitirían parchear esquemas con RFC 7386 o RFC 6902 (consulte here para obtener más información) y, de hecho, implementar la herencia de esquemas.

En breve:

  • si establece propiedades additionalProperties en false , y su JSON básico es un objeto, no podrá definir miembros de objeto adicionales;
  • Con estas dos nuevas palabras clave, puedes.

jsonschema2pojo proyecto " jsonschema2pojo " contiene notaciones para este propósito.

En el esquema JSON, simplemente incluya algo como esto;

"extendsJavaClass" : "com.somecompany.SomeBaseClass",

es decir

{ "title": "....", "description": "....", "type": "object", "extendsJavaClass" : "com.somecompany.SomeBaseClass", "properties": { "...": { "items": { "$ref": "#/definitions/...." }, "type": "array" } ....... }

entonces la clase generada por el proyecto tendrá su cláusula "se extiende " como;

/** * ... * <p> * ... * */ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ ... }) public class MyNewClass extends SomeBaseClass { ... }

También puedes buscar notaciones similares here .

PD: Estas notaciones no son "construcciones de esquema JSON estándar". Se agregan por el simple hecho de " simplemente hacerlo " hasta que sea posible una forma estándar de hacerlo.

Espero eso ayude..