をCLASS2するクラス1のJSON表現のオブジェクトタイプフィールドをマッピング:ジャクソン - 私は定義された2つのPOJOを有する
クラス1 -
public class Class1 {
Map<String, Object> param1 = new HashMap<String, Object>();
Map<String, Object> param2 = new HashMap<String, Object>();
Object body;
// getters-setters...
}
クラス2 -
public class Class2 {
private String name = null;
private String description = null;
private List<Integer> data = new ArrayList<Integer>();
// getters-setters...
}
ボディフィールドは動的です私はそれをObject型にしました。 swagger codegen
を使用して、実行時にClass2 Pojoを生成します。したがって、基本的にbody
オブジェクトはClass2を表します。 Class1は固定クラスであり、フィールドはすべて既知です。
json -
{
"param1" : {
"id" : 132
},
"param2" : {
"address" : "String"
},
"body" : {
"name" : "value",
"description" : "value",
"data" : [ ]
}
}
私はClass1のためにJSONの上にデシリアライズすることができます
ObjectMapper mapper = new ObjectMapper();
Class1 ij = mapper.readValue(new File(path_of_above_json), Class1.class);
param1 = ij.getParam1();
param2 = ij.getParam2();
Object body = ij.getBody();
私はクラス2に身体のフィールドをマッピングします。この追加のクラスを避けるために、我々はジャクソンと同じことを達成することができます
class ResponseBodyDeserializer<T> implements JsonDeserializer<T>
{
@Override
public T deserialize(JsonElement je, Type type, JsonDeserializationContext jdc)
throws JsonParseException
{
// Get the element from the parsed JSON
JsonElement content = je.getAsJsonObject().get("body");
// Deserialize it
return new Gson().fromJson(content, type);
}
}
- 追加のクラスResponseBodyDeserializerで
Class2 body1 = new Class2();
Gson gson = new GsonBuilder().registerTypeAdapter(Class2.class, new ResponseBodyDeserializer<Class2>()).create();
ObjectMapper mapper = new ObjectMapper();
InputStream in = MainClass.class.getResourceAsStream(path_of_above_json);
BufferedReader r = new BufferedReader(new InputStreamReader(in));
body1 = gson.fromJson(r , Class2.class);
:私はgsonと同じことを行うことができますか?
ありがとうございました!ここで
ありがとうございました。 – HitchHiker