发布于2022-12-05 23:33 阅读(197) 评论(0) 点赞(18) 收藏(2)
我定义了两个 POJO:
Class1 -
public class Class1 {
Map<String, Object> param1 = new HashMap<String, Object>();
Map<String, Object> param2 = new HashMap<String, Object>();
Object body;
// getters-setters...
}
Class2 -
public class Class2 {
private String name = null;
private String description = null;
private List<Integer> data = new ArrayList<Integer>();
// getters-setters...
}
body 字段是动态的,因此我将其设为 Object 类型。我在运行时使用swagger codegen
. 所以基本上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();
我想将 body 字段映射到 Class2。我可以对 gson 做同样的事情:
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);
使用附加类 ResponseBodyDeserializer -
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);
}
}
我们能否对 Jackson 做同样的事情来避免这个额外的课程?
谢谢!
public static class Class1<T> {
private Map<String, Object> param1 = new HashMap<String, Object>();
private Map<String, Object> param2 = new HashMap<String, Object>();
private T body;
}
并像这样使用它:
ObjectMapper mapper = new ObjectMapper();
Class1<Class2> ij = mapper.readValue(json, new TypeReference<Class1<Class2>>() {});
Map<String, Object> param1 = ij.getParam1();
Map<String, Object> param2 = ij.getParam2();
Class2 body = ij.getBody();
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/583874/b89d752387bf36b61e1a/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!