我有一个波卓班
public class Stock{
int id;
String name;
Date date;
}
是否有可以将pojo转换为json模式的注释或开发框架/api,如下所示
{"id":
{
"type" :"int"
},
"name":{
"type" :"string"
}
"date":{
"type" :"Date"
}
}
号
此外,我还可以通过在POJO上指定一些注释或配置来扩展模式以添加诸如"Required":"Yes"、每个字段的描述等信息,并可以生成下面这样的JSON模式。
{"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"
}
}
这就是你要找的吗?stackoverflow.com/questions/9593409/convert-pojo-to-json
不,它将pojo转换为json对象。我希望将JSON模式生成为meta[有关映射到POJO字段(如数据类型、是否需要等)的输入表单字段的信息],以供最终用户使用]。
这是一个在线站点,将从json:json schema.net生成json模式。
从JSON数据生成JSON模式的工具可能重复
实际上,我不想找任何工具。我需要一个可以有助手类或注释的API来描述POJO中字段的行为。例如,我最近发现Jackson 2.4.1在pojo;[link]stackoverflow.com/questions/24515917/…中添加了新的注释@jsonpropertydescription以向字段添加说明。有没有可能通过反思来实现我的文章中的例子?
我注意到Jackson还没有这个特性,所以我选择使用POJO上的反射来构建元数据。
Jackson通过json模式模块实现了这个功能:github.com/fasterxml/jackson-module-json schema
我自己也遇到了这样的需求,但需要获得最新的模式规范(本文中的v4)。我的解决方案是以下链接的第一个答案:从带有扭曲的POJO生成JSON模式
使用org.codehaus.jackson.map包中的对象,而不是com.fasterxml.jackson.databind包中的对象。如果你按照这一页上的说明做,那你就错了。只需使用杰克逊映射器模块。
以下是未来谷歌的代码:
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);
}
fwiw使用外部模块非常好,因为内置的生成机制正在被弃用(至少这是计划)。相反地,没有技术障碍可以让它在那里工作。但在那之前,很高兴知道还有一项工作要做。
@斯塔克曼,既然你对这个有点了解,你能看看这个,告诉我你有什么线索吗?谢谢!stackoverflow.com/questions/7161638/…
我会看看我是否能帮上忙——感谢您报告这件事,并为不正常的事情道歉。
fwiw,Jackson 2.4.4中有相关的修复程序,以防您使用早期版本(即非常新的修复程序)。
我尝试了2.5.0的当前迭代,但行为没有改变。
其中一个工具是Jackson JSON模式模块:
https://github.com/fasterxml/jackson-module-jsonschema
它使用Jackson DataBind的POJO自省来遍历POJO属性,同时考虑到Jackson注释,并生成一个JSON模式对象,然后将其序列化为JSON或用于其他目的。
如果具有包含需要保持枚举的枚举类型的复杂对象,则指定的模块将不起作用。请参阅下面的我的答案,以获得更好的工具(仍然是Jackson,但是是Jackson Mapper)。链接上的说明会导致枚举在模式中呈现为简单字符串。
是的,我看到了一个错误报告。我希望我们能为这个模块获得更多的贡献者——这是外部贡献,被广泛使用,但目前还没有专门的所有者。
使用JJSchema。它可以生成符合草案4的JSON模式。有关详细信息,请参阅http://wilddiary.com/generate-json-schema-from-java-class/。
尽管Jackson JSON模式模块也可以生成模式,但到目前为止,它只能生成符合草案3的模式。
github.com/mbknor/mbknor-jackson-jsonschema可以基于jackson注释生成草案4模式
public static String getJsonSchema(Class clazz) throws IOException {
Field[] fields = clazz.getDeclaredFields();
List> map=new ArrayList>();
for (Field field : fields) {
HashMap objMap=new HashMap();
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;
}
号