在 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