4

我将直接从我的问题开始,稍后我会提供更多背景信息。

简单:我有一个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}
4

2 回答 2

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; 
}  


并使用杰克逊 将对象转换为 JSON

new org.codehaus.jackson.map.ObjectMapper().writeValueAsString(instanceofMapJson);  

谷歌 JSON

new com.google.gson.Gson().toJson(instanceofMapJson);  

PS。使用 google json,您可以从类中删除 xml 注释

于 2012-08-24T10:03:52.777 回答
1

反射是设置通用未知对象属性的唯一方法。
您可以在文档中找到所需的一切。

于 2012-08-24T08:42:19.077 回答