Esquema JSon e inheritance

Eu pesquisei no esquema json com ligações java com inheritance e todas as buscas me levaram ao uso de “allof”.

Usando allOf potencialmente resolveria o meu problema, mas eu estou querendo saber se existe uma construção no esquema json que eu possa usar o que irá gerar o meu código java com inheritance java real “B estende A” – ao invés de inlining todas as propriedades de A dentro B?

Eu estou querendo saber se isso é mesmo suportado / factível ou estou apenas sonhando. Se não for suportado, eu ficaria curioso em saber o motivo.

OK, bem, eu sou o autor de ambos:

  • a especificação atual de validação do esquema JSON;
  • e a biblioteca Java que é a mais usada para a validação do esquema JSON em Java atualmente: json-schema-validator .

Então eu posso responder sua pergunta, e a resposta básica é não.

Por quê? Porque não há tal coisa como inheritance de esquema atualmente definida.

Ao usar allOf , você exige que todos os esquemas em allOf correspondam; e se você for rigoroso sobre o que pode existir neste ou naquele JSON, você terá adicionado additionalProperties a false . Como tal, você não pode herdar.

A solução real é um mecanismo que propus para o draft v5: as palavras-chave $merge e $patch . Isso permitiria a correção de esquemas com RFC 7386 ou RFC 6902 (veja aqui para mais informações) e, de fato, implementar a inheritance de esquema.

Em resumo:

  • Se você definir additionalProperties como false e seu JSON básico for um object, você não poderá definir membros de object adicionais;
  • Com essas duas novas palavras-chave, você pode.

O projeto ” jsonschema2pojo ” contém annotations para esse propósito.

No esquema JSON, inclua algo assim:

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

ou seja

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

então a class gerada pelo projeto terá sua cláusula ” extends ” como;

 /** * ... * 

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

Também você pode procurar por notações semelhantes aqui .

PS: Estas notações não são “construções padrão de esquema JSON”. Eles são adicionados por uma questão de ” apenas fazê-lo ” até que uma maneira padrão de fazê-lo seja possível.

Espero que ajude..