java jackson 生成_关于jackson:从java类生成JSON模式

我有一个波卓班

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值