从Java类生成JSON模式

从Java类生成JSON模式,json,jackson,jsonschema,fasterxml,jackson-modules,Json,Jackson,Jsonschema,Fasterxml,Jackson Modules,我有一门POJO课程: public class Stock { int id; String name; Date date; } 是否有任何注释或开发框架/API可以将POJO转换为JSON模式,如下所示: {"id": { "type" : "int" }, "name":{ "type" : &

我有一门POJO课程:

public class Stock {
 int id;
 String name;
 Date date;
}
是否有任何注释或开发框架/API可以将POJO转换为JSON模式,如下所示:

{"id":
      {             
        "type" : "int"
      },
"name":{   
        "type" : "string"
       }
"date":{
        "type" : "Date"
      }
}
{"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"
      }
}
此外,通过在POJO上指定一些注释或配置,我还可以扩展模式以添加信息,如
“Required”:“Yes”
、每个字段的描述等,并可以生成JSON模式,如下所示:

{"id":
      {             
        "type" : "int"
      },
"name":{   
        "type" : "string"
       }
"date":{
        "type" : "Date"
      }
}
{"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"
      }
}

其中一个工具是Jackson JSON模式模块:


它使用Jackson databind的POJO内省来遍历POJO属性,同时考虑Jackson注释,并生成JSON模式对象,然后可以将其序列化为JSON或用于其他目的。

使用JJschema。它可以生成符合草案4的JSON模式。有关详细信息,请参阅本文

虽然它也可以生成模式,但到目前为止,它只能生成符合草案3的模式。

公共静态字符串getJsonSchema(Class clazz)抛出IOException{
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;
    }
Field[]fields=clazz.getDeclaredFields(); 列表映射=新的ArrayList(); 用于(字段:字段){ HashMap objMap=新的HashMap(); put(“name”,field.getName()); put(“type”,field.getType().getSimpleName()); put(“格式”,“格式”); map.add(objMap); } ObjectMapper mapper=新的ObjectMapper(); 字符串json=mapper.writeValueAsString(map); 返回json; }
Java JSON模式生成器:


使用Jackson从Java类创建JSON模式(草案6、草案7或草案2019-09)。

这就是您想要的吗?否,它将pojo转换为json对象。我正在寻找将JSON模式生成为meta[有关映射到pojo字段(如数据类型)的输入表单字段的信息,是否需要,等等]的最终用户)。这里有一个在线网站,将从JSON生成JSON模式:可能是JSON模式的重复。实际上,我不寻找任何工具。我需要一个api,它可以有助手类或注释来描述pojo中字段的行为。例如,我最近发现jackson 2.4.1有一个新的注释@JsonPropertyDescription,用于将描述添加到pojo中的字段中;[链接]。有没有一种可能的方法可以通过反射来实现我文章中的示例?如果您有复杂的对象,其中包含需要保留枚举的枚举类型,那么您指定的模块将无法工作。请参阅下面我的答案以获得更好的工具(仍然是Jackson,但Jackson mapper)。链接中的说明导致枚举在schemaYes中呈现为简单字符串,我看到了一个错误报告。我希望我们能为这个模块找到更多的贡献者——它是外部贡献,使用非常广泛,但目前还没有专门的所有者。可以基于Jackson注释生成草稿4模式