Generate JSON schema from java class
我有一个波卓班
1 2 3 4 5 | public class Stock{ int id; String name; Date date; } |
是否有可以将pojo转换为json模式的注释或开发框架/api,如下所示
1 2 3 4 5 6 7 8 9 10 11 | {"id": { "type" :"int" }, "name":{ "type" :"string" } "date":{ "type" :"Date" } } |
号
此外,我还可以通过在POJO上指定一些注释或配置来扩展模式以添加诸如"Required":"Yes"、每个字段的描述等信息,并可以生成下面这样的JSON模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | {"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" } } |
我自己也遇到了这样的需求,但需要获得最新的模式规范(本文中的v4)。我的解决方案是以下链接的第一个答案:从带有扭曲的POJO生成JSON模式
使用org.codehaus.jackson.map包中的对象,而不是com.fasterxml.jackson.databind包中的对象。如果你按照这一页上的说明做,那你就错了。只需使用杰克逊映射器模块。
以下是未来谷歌的代码:
1 2 3 4 5 6 7 8 9 | 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); } |
其中一个工具是Jackson JSON模式模块:
https://github.com/fasterxml/jackson-module-jsonschema
它使用Jackson DataBind的POJO自省来遍历POJO属性,同时考虑到Jackson注释,并生成一个JSON模式对象,然后将其序列化为JSON或用于其他目的。
使用JJSchema。它可以生成符合草案4的JSON模式。有关详细信息,请参阅http://wilddiary.com/generate-json-schema-from-java-class/。
尽管Jackson JSON模式模块也可以生成模式,但到目前为止,它只能生成符合草案3的模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
号