转换LinkedHashMap<;字符串,字符串>;在Java中创建一个对象
我将直接从我的问题开始,稍后我将提供更多的背景信息 Simple:我有一个转换LinkedHashMap<;字符串,字符串>;在Java中创建一个对象,java,json,jaxb,jax-rs,Java,Json,Jaxb,Jax Rs,我将直接从我的问题开始,稍后我将提供更多的背景信息 Simple:我有一个LinkedHashMap,它代表一个特定的对象。 将其转换为该对象的最佳方式是什么 我知道您可以使用泛型遍历所有元素并设置字段,但是嵌套对象是什么呢 Background:我有一个使用JSON对象的JAX-RS服务。我的服务处理不同类型的对象,只表示一个接口。所以我不知道哪些对象来自外部,哪些程序正在使用我的服务 在运行时,我通过界面上的@Inject获取信息。JAX-RS服务将来自客户机的数据存储在一个非类型化的对象中
LinkedHashMap
,它代表一个特定的对象。
将其转换为该对象的最佳方式是什么
我知道您可以使用泛型遍历所有元素并设置字段,但是嵌套对象是什么呢
Background:我有一个使用JSON对象的JAX-RS服务。我的服务处理不同类型的对象,只表示一个接口。所以我不知道哪些对象来自外部,哪些程序正在使用我的服务
在运行时,我通过界面上的@Inject
获取信息。JAX-RS服务将来自客户机的数据存储在一个非类型化的对象中,并自动完成(即LinkedHashMap
)
在我的界面中,我想提供一个类似于setObject
的方法,参数应该是该类型的对象。我可以处理所有这些,但不能处理将对象LinkedHashMap
转换为特定对象的部分
示例结构:
目标对象可能是这样的
public class Document {
private String title;
private String id;
private int version;
}
{title=some title, id=1, version=1}
LinkedHashMap
看起来是这样的
public class Document {
private String title;
private String id;
private int version;
}
{title=some title, id=1, version=1}
反射是设置通用未知对象属性的唯一方法。
您可以在文档中找到所需的所有内容。您可以创建两个类
@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 com.google.gson.Gson().toJson(instanceofMapJson);
另外,使用google json,您可以从类中删除xml注释您在google上搜索过库以帮助从json转换为Java对象吗?你不可能独自一人想要这样做。为什么你不能直接使用
HashMap
?使用HashMap有什么好处@mercutio@DuncanJones我的问题是我已经将JSON转换成Java了,这是在JAX-RS中自动完成的。但是在检索信息时,我没有关于后面对象的信息。因此,拥有一个表示这个LinkedHashmap的对象是可以的。嗯,好吧,但是我如何以性能的方式处理嵌套对象呢?反射不是为性能而设计的。您可以尝试在(包含)setObject
方法的(应用程序)中缓存对象的(类)变量->方法映射,这将消除每次迭代对象的属性/方法的需要,但仍然会(相对)缓慢。对于动态方法调用,您无能为力—它太慢了。您知道是否有库可以帮助我设置对象吗?请从头开始—查看JAXB(),我尝试了反射,最后使用Gson映射我的对象。处理嵌套对象可能会很混乱……我还考虑过使用JAX-RS使用的相同方法执行反向封送处理。我非常喜欢Gson,但就我的情况而言,我希望有一个JAX-RS标准方式,以便在应用服务器jackson或任何其他JAX-RS实现上使用。有办法吗?我现在正在使用Gson,但我仍然期待一种不依赖于库的方式。