POJOクラスがあります
public class Stock{
int id;
String name;
Date date;
}
以下のようなPOJOをJSONスキーマに変換できる注釈または開発フレームワーク/ APIはありますか
{"id":
{
"type" : "int"
},
"name":{
"type" : "string"
}
"date":{
"type" : "Date"
}
}
また、POJOでいくつかの注釈または構成を指定することにより、スキーマを拡張して「必須」:「はい」などの情報、各フィールドの説明などを追加し、以下のような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"
}
}
私は自分でこれを行う必要がありましたが、最新のスキーマ仕様(この投稿の時点でv4)を取得する必要がありました。私の解決策は、以下のリンクの最初の答えです: POJOからJsonスキーマをねじれで生成
Com.fasterxml.jackson.databindパッケージではなく、org.codehaus.jackson.mapパッケージのオブジェクトを使用します。 this ページの指示に従っている場合は、間違っています。代わりにjackson-mapperモジュールを使用してください。
将来のGoogle社員向けのコードは次のとおりです。
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);
}
そのようなツールの1つがJackson JSON Schemaモジュールです。
https://github.com/FasterXML/jackson-module-jsonSchema
jacksonデータバインドのPOJOイントロスペクションを使用して、Jacksonアノテーションを考慮してPOJOプロパティをトラバースし、JSONスキーマオブジェクトを生成します。JSONスキーマオブジェクトは、JSONとしてシリアル化されるか、他の目的に使用されます。
JJschemaを使用します。ドラフト4準拠のJSONスキーマを生成できます。詳細については、この投稿を参照してください http://wilddiary.com/generate-json-schema-from-Java-class/ .
Jackson Json Schema module もスキーマを生成できますが、今日の時点ではドラフト3準拠のスキーマのみを生成できます。
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;
}