将LinkedHashMap <string,string>转换为Java中的对象</string,string>

时间:2012-08-24 08:26:06

标签: java json jaxb jax-rs

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

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

2 个答案:

答案 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)

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