wake-up-neo.com

Generieren Sie ein JSON-Schema aus der Java-Klasse

Ich habe eine POJO-Klasse 

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

Gibt es Anmerkungen oder Entwicklungsframework/API, die das POJO-Schema in ein JSON-Schema konvertieren können, siehe unten

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

und ich kann das Schema auch erweitern, um Informationen wie "Required" hinzuzufügen: "Yes", Beschreibung für jedes Feld usw., indem Sie einige Anmerkungen oder Konfigurationen für POJO angeben und ein JSON-Schema wie unten beschrieben generieren.

{"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"
      }
}
28
user3587174

Ich hatte das Bedürfnis, dies selbst zu tun, musste aber die neuesten Schemaspezifikationen (v4 ab diesem Beitrag) beziehen. Meine Lösung ist die erste Antwort unter dem folgenden Link: Generiere Json Schema aus POJO mit einem Twist

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

Hier ist der Code für zukünftige 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);
}
21
StormeHawke

Ein solches Werkzeug ist das Modul Jackson JSON Schema:

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

dabei wird die POJO-Introspektion von Jackson databind zum Durchlaufen von POJO-Eigenschaften unter Berücksichtigung der Jackson-Anmerkungen verwendet und ein JSON-Schema-Objekt erzeugt, das als JSON serialisiert oder für andere Zwecke verwendet werden kann.

8
StaxMan

Verwenden Sie JJschema. Es können Entwurfs-4-kompatible JSON-Schemas generiert werden. Weitere Informationen finden Sie in diesem Beitrag http://wilddiary.com/generate-json-schema-from-Java-class/ .

Obwohl das Jackson Json Schema-Modul auch ein Schema generieren kann, kann es ab heute nur noch Entwurf 3-konforme Schemata generieren.

2
Drona
public static String getJsonSchema(Class clazz) throws IOException {
         Field[] fields = clazz.getDeclaredFields();
         List<Map<String,String>> map=new ArrayList<Map<String,String>>();
         for (Field field : fields) {
             HashMap<String, String> objMap=new  HashMap<String, String>();
             objMap.put("name", field.getName());
             objMap.put("type", field.getType().getSimpleName());
             objMap.put("format", "");
             map.add(objMap);
         }
         ObjectMapper mapper = new ObjectMapper();
         String json = mapper.writeValueAsString(map);

       return json;
    }
0
P Rajesh