场景
在 Restful 服务中返回 Json 内容。消费端需要定义对应的 Java 类,以便直接将返回的数据转换为 Java 类。手工编写 Java 类完全是一个体力活,费事费力,容易出错。
例如, Elastic Search Low Level API 返回的 Json。 在 Kibana 后台访问 ES 返回的格式即是 Low Level API返回的 JSON。 为什么不自动生成 Java Bean 类代码呢?
方案
1.使用 jsonschema2pojo 命令行.
https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started#the-command-line-interface
从这里下载:
https://github.com/joelittlejohn/jsonschema2pojo/releases
用法:
在解压包的 bin 目录, 创建 link
ln -s /Users/xxx/workspace/jsonschema2pojo-1.1.1/bin/jsonschema2pojo /usr/local/bin/jsonschema2pojo
下载示例的 address.schema.json 文件, 运行示例命令:
./jsonschema2pojo --source address.schema.json --target java-gen
指定 Elastic Search JSON 格式文件输入,生成需要 的 Java 类定义:
jsonschema2pojo -T json --source es.schema.json --target java
2.Online 工具
https://www.freecodeformat.com/json2pojo.php
https://codebeautify.org/json-to-java-converter
3.使用场景 - 处理 ElasticSearch的 JSON 返回结果
处理 Elastic Search 返回的 Json 格式内容。
ElasticSearch 返回的 Json 内容
{
"took" : 113,
"timed_out" : false,
"_shards" : {
"total" : 10,
"successful" : 9,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 16.761106,
"hits" : [
{
"_index" : "media",
"_type" : "doc",
"_id" : "176",
"_score" : 16.761106,
"_source" : {
"publish_state" : "Published",
"media_id" : "226bb012c46e1ef4e52b788cf3312345",
"id" : 176,
"url" : "http://www.abcd.com/20190317152813791092",
"owner_id" : 1438747659963495,
"media_info" : "",
"description" : null,
"env" : 1,
"cover_url" : null,
"gmt_create" : "2016-03-17T07:29:18.000Z",
"gmt_modified" : "2016-06-16T06:50:48.000Z",
"state" : "Normal",
"title" : "20160317152813791092",
"tags" : null,
"@version" : "1",
"@timestamp" : "2021-04-06T14:36:17.393Z"
}
}
]
}
}
把上面的内容保存为 json 文件, 使用步骤1的命令,即可生成对应的 Java 类的定义。 从而可以直接使用 Elastic Search 的 Low Level API 来访问。
参考:
https://stackoverflow.com/questions/1957406/generate-java-class-from-json

本文介绍了如何利用jsonschema2pojo命令行工具和在线转换器,从ElasticSearch的JSON响应中自动生成对应的Java类,简化开发过程。通过示例展示了命令行的使用方法,并提供了ElasticSearch返回的JSON示例。
2213

被折叠的 条评论
为什么被折叠?



