我将直接从我的问题开始,稍后我会提供更多背景信息。
简单:我有一个LinkedHashMap<String, String>
,它代表一个特定的对象。
将它转换为该对象的最佳方法是什么?
我知道您可以使用泛型来遍历所有元素并设置字段,但什么是嵌套对象?
后台:我有一个消耗JSON对象的JAX-RS服务。我的服务处理不同类型的对象,只代表一个接口。所以我不知道哪些对象来自外部以及哪个程序正在使用我的服务。
在运行时,我通过我的界面上的@Inject
获取信息。 JAX-RS服务将来自客户端的数据存储在非类型化对象中并自动完成(即LinkedHashMap<String, String>
)。
使用我的界面,我想提供像setObject
这样的方法,参数应该是该类型的对象。我可以处理所有这些,但不能处理将对象LinkedHashMap<String, String>
转换为该特定对象的部分。
示例结构: 目标对象可能喜欢
public class Document {
private String title;
private String id;
private int version;
}
LinkedHashMap
看起来像那样
{title=some title, id=1, version=1}
答案 0 :(得分:3)
您可以创建两个类
@XmlAccessorType(XmlAccessType.FIELD)
public class Document {
@XmlElement
private String title;
@XmlElement
private String id;
@XmlElement
private int version;
}
@XmlAccessorType(XmlAccessType.FIELD)
public class MapJson {
@XmlElement
private LinkedHashMap<String, String> documents;
}
和cobvert Object to JSON usingg
杰克逊
new org.codehaus.jackson.map.ObjectMapper().writeValueAsString(instanceofMapJson);
Google JSON
new com.google.gson.Gson().toJson(instanceofMapJson);
PS。使用google json,您可以从类中删除xml注释
答案 1 :(得分:1)
反射是设置通用未知对象属性的唯一方法 您可以在文档中找到所需的一切。