2014-10-05 20 views
20

Ho una classe POJOGenera schema JSON dalla classe java

public class Stock{ 
int id; 
String name; 
Date date; 
} 

Ci sono annotazioni o framework di sviluppo/API in grado di convertire POJO allo schema JSON come qui di seguito

{"id": 
     {    
     "type" : "int" 
     }, 
"name":{ 
     "type" : "string" 
     } 
"date":{ 
     "type" : "Date" 
     } 
} 

e anche io posso espandi lo schema per aggiungere informazioni come "Richiesto": "Sì", descrizione per ogni campo, ecc., specificando alcune annotazioni o configurazioni su POJO e puoi generare uno schema JSON come di seguito.

{"id": 
     {    
     "type" : "int", 
     "Required" : "Yes", 
     "format" : "id must not be greater than 99999", 
     "description" : "id of the stock" 
     }, 
"name":{ 
     "type" : "string", 
     "Required" : "Yes", 
     "format" : "name must not be empty and must be 15-30 characters length", 
     "description" : "name of the stock" 
     } 
"date":{ 
     "type" : "Date", 
     "Required" : "Yes", 
     "format" : "must be in EST format", 
     "description" : "filing date of the stock" 
     } 
} 
+0

È questo quello che stai cercando? http://stackoverflow.com/questions/9593409/convert-pojo-to-json – Elric

+0

No, converte pojo in json object. Sto cercando di generare schema JSON come meta [informazioni sui campi del modulo di input mappati ai campi pojo come datatype, se è richiesto o meno, ecc.] Per gli utenti finali). – user3587174

+0

Ecco un sito online che produrrà lo schema json da json: http://www.jsonschema.net/ – DwB

risposta

4

Uno di questi strumenti è il modulo Jackson JSON Schema:

https://github.com/FasterXML/jackson-module-jsonSchema

che utilizza POJO introspezione di Jackson databind attraversare proprietà POJO, tenendo conto Jackson annotazioni, e produce un oggetto JSON Schema, che può quindi essere serializzato come JSON o utilizzato per altri scopi.

+0

Il modulo specificato non funziona se si dispone di oggetti complessi contenenti tipi enum che devono rimanere enumerati. Vedere la mia risposta qui sotto per uno strumento migliore (Still Jackson, ma jackson-mapper.) Le istruzioni al tuo collegamento danno come risultato il rendering di Enum come semplici stringhe nello schema – StormeHawke

+0

Sì, ho visto un bug report.Spero che otterremo più contributori per il modulo: è un contributo esterno, ampiamente utilizzato, ma a questo punto nessun proprietario dedicato. – StaxMan

14

Mi sono imbattuto in un bisogno di farlo da solo, ma avevo bisogno di ottenere le ultime specifiche dello schema (v4 di questo post). La mia soluzione è la prima risposta al seguente link: Generate Json Schema from POJO with a twist

Utilizzare gli oggetti dal pacchetto org.codehaus.jackson.map anziché dal pacchetto com.fasterxml.jackson.databind. Se stai seguendo le istruzioni sulla pagina this allora stai sbagliando. Usa invece il modulo jackson-mapper.

Ecco il codice per Googler futuri:

private static String getJsonSchema(Class clazz) throws IOException { 
    org.codehaus.jackson.map.ObjectMapper mapper = new ObjectMapper(); 
    //There are other configuration options you can set. This is the one I needed. 
    mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true); 

    JsonSchema schema = mapper.generateJsonSchema(clazz); 

    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema); 
} 
+0

FWIW sarebbe bello farlo funzionare con un modulo esterno, solo perché il meccanismo di generazione incorporato è deprecato (almeno questo è il piano). E viceversa non c'è un blocco tecnico per farlo funzionare lì. Ma fino ad allora è bello sapere che c'è un work-around. – StaxMan

+0

@StaxMan dato che sembri sapere qualcosa su questo, puoi dare un'occhiata a questo e dirmi se hai qualche indizio? Grazie! http://stackoverflow.com/questions/7161638/how-do-i-use-a-custom-serializer-with-jackson/22108535#22108535 – StormeHawke

+0

Vedrò se posso aiutarti - grazie per aver segnalato questo e mi scuso per le cose che non funzionano come dovrebbero. – StaxMan