2014-10-05 11 views
20

ich eine POJO Klassegenerieren JSON Schema von Java-Klasse

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

Gibt es irgendwelche Anmerkungen oder Entwicklungs-Framework/api, die POJO zu JSON Schema wie unten

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

und auch kann umwandeln kann i Erweitern Sie das Schema, um Informationen wie "Erforderlich": "Ja", Beschreibung für jedes Feld usw. hinzuzufügen, indem Sie einige Anmerkungen oder Konfigurationen für POJO angeben und JSON-Schema wie unten generieren können.

{"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

IST das wonach Sie suchen? http://stackoverflow.com/questions/9593409/convert-pojo-to-json – Elric

+0

Nein, das Pojo in Json-Objekt konvertiert. Ich suche nach JSON-Schema als Meta [Informationen über die Eingabeform Felder zu pojo Felder wie Datentyp, ob es erforderlich ist, oder nicht, etc.,] für die Endbenutzer). – user3587174

+0

Hier ist eine Online-Site, die JSON-Schema von JSON erzeugen wird: http://www.jsonschema.net/ – DwB

Antwort

4

Ein solches Werkzeug ist Jackson JSON Schema Modul:

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

die Jackson databind des POJO Selbstbeobachtung verwendet POJO Eigenschaften zu durchqueren, in Betracht Jackson Anmerkungen machen, und erzeugt ein JSON Schema Objekt, das kann dann als JSON serialisiert oder für andere Zwecke verwendet werden.

+0

Das Modul, das Sie angeben, funktioniert nicht, wenn Sie komplexe Objekte mit Aufzählungstypen haben, die Enums bleiben müssen. Siehe meine Antwort unten für ein besseres Werkzeug (Still Jackson, aber Jackson-Mapper.) Die Anweisungen auf Ihrem Link führen dazu, dass Enums als einfache Zeichenfolgen im Schema dargestellt werden. – StormeHawke

+0

Ja, ich habe einen Fehlerbericht gesehen.Ich hoffe, dass wir mehr Beitragszahler für das Modul bekommen - es ist ein externer Beitrag, ziemlich weit verbreitet, aber kein engagierter Besitzer an dieser Stelle. – StaxMan

14

Ich bin in der Notwendigkeit, dies selbst zu tun, aber musste die neueste Schema-Spezifikation (v4 ab diesem Post) zu bekommen. Meine Lösung ist die erste Antwort unter dem folgenden Link: Generate Json Schema from POJO with a twist

Verwenden Sie Objekte aus dem Paket org.codehaus.jackson.map und nicht aus dem Paket com.fasterxml.jackson.databind. Wenn Sie die Anweisungen auf this Seite befolgen, dann tun Sie es falsch. Verwenden Sie stattdessen das jackson-mapper-Modul.

Hier ist der Code für die Zukunft Googler:

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 Es wäre großartig, wenn dies mit externem Modul funktioniert, nur weil der eingebaute Generierungsmechanismus veraltet ist (zumindest ist das der Plan). Und umgekehrt gibt es keinen technischen Block, um es dort zum Laufen zu bringen. Aber bis dahin ist es gut zu wissen, dass es einen Workaround gibt. – StaxMan

+0

@StaxMan da du anscheinend ein bisschen darüber weißt, kannst du dir das ansehen und mir sagen, ob du irgendwelche Hinweise hast? Vielen Dank! http://stackoverflow.com/questions/7161638/how-doi-use-a-custom-serializer-with-jackson/22108535#22108535 – StormeHawke

+0

Ich werde sehen, ob ich helfen kann - danke, dass Sie dies melden und Entschuldigung für Dinge, die nicht so funktionieren, wie sie sollten. – StaxMan