web-dev-qa-db-fra.com

Générer un schéma JSON à partir d'une classe Java

J'ai un cours de POJO 

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

Existe-t-il des annotations ou un framework de développement/api permettant de convertir les schémas POJO en JSON, comme ci-dessous?

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

et aussi je peux développer le schéma pour ajouter des informations comme "Obligatoire": "Oui", une description pour chaque champ, etc., en spécifiant des annotations ou des configurations sur POJO et pouvant générer un schéma JSON comme ci-dessous.

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

J'ai eu besoin de le faire moi-même, mais j'avais besoin de la dernière spécification de schéma (v4 à partir de ce post). Ma solution est la première réponse sur le lien ci-dessous: Générer un schéma Json à partir de POJO avec un twist

Utilisez des objets du package org.codehaus.jackson.map plutôt que du package com.fasterxml.jackson.databind. Si vous suivez les instructions de la page this page, vous vous trompez. Utilisez simplement le module jackson-mapper à la place.

Voici le code pour les futurs googlers:

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

Un de ces outils est le module Jackson JSON Schema:

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

qui utilise l'introspection POJO de Jackson databind pour parcourir les propriétés de POJO, en tenant compte des annotations de Jackson, et produit un objet Schéma JSON, qui peut ensuite être sérialisé en tant que JSON ou utilisé à d'autres fins.

8
StaxMan

Utilisez JJschema. Il peut générer des schémas JSON conformes au projet 4. Référez-vous à cet article http://wilddiary.com/generate-json-schema-from-Java-class/ pour plus de détails.

Bien que le module de schéma Jackson Json puisse également générer un schéma, il ne peut, à ce jour, que générer que des schémas conformes au brouillon 3.

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