Recuerda que en las ciencias un problema casi siempre tiene diferentes soluciones, de igual modo te enseñamos lo más óptimo y eficiente.
Solución:
OK, bueno, 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 a su pregunta, y la respuesta básica es no.
¿Por qué? Porque no existe tal cosa como la herencia de esquema definida actualmente.
Cuando usas allOf
necesita que todos los esquemas en allOf
partido; y si eres estricto con lo que puede existir en este o aquel JSON, habrás agregado additionalProperties
para false
. Como tal, no puede heredar.
La solución real es un mecanismo que propuse para el borrador v5: el $merge
y $patch
palabras clave Esto permitiría parchear esquemas con RFC 7386 o RFC 6902 (consulte aquí para obtener más información) y, de hecho, implementar la herencia de esquema.
En breve:
- si configuras
additionalProperties
parafalse
y su JSON básico es un objeto, no podrá definir miembros de objetos adicionales; - con estas dos nuevas palabras clave, puede hacerlo.
El 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 “extiende” cláusula como;
/**
* ...
*
* ...
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder(
...
)
public class MyNewClass
extends SomeBaseClass
...
También puede buscar notaciones similares aquí.
PD: Estas notaciones no son “construcciones de esquema JSON estándar”. Se agregan con el fin de “simplemente hacerlo” hasta que sea posible una forma estándar de hacerlo.
Espero eso ayude..
Recuerda que tienes autorización de decir si te fue de ayuda.