java支持clojure中的xml和json REST响应
假设我有一个java的REST API,它支持JSON或XML响应。响应包含相同的数据,但形式不同。例如,在json中,我可能有:
{
"persons": [
{
"name":"Bob",
"age":24,
"hometown":"New York"
}
]
}
而在XML中,它看起来是这样的:
<persons>
<person name="bob" age="24">
<hometown>New York</hometown>
</person>
</persons>
也就是说,一些值是person的属性,而另一些是子元素。在Java中,使用JAXB和Jackson,很容易通过模型对象上的注释来隐藏这些差异,例如:
public class Person {
@XmlAttribute
String name;
@XmlAttribute
Integer age;
@XmlElement
String hometown;
}
JAXB读取注释,Jackson使用字段名来确定要做什么。因此,对于单个模型,很容易支持多种输出格式
所以我的问题是,如何在clojure中做同样的事情。我知道有clj json可以轻松地将clojure映射和向量转换为json(如果我没弄错的话,可以使用jackson)。我知道两个都是clojure。xml。发射并关闭。contrib。xml。可以反序列化地图的prxml&;向量到XML。但除非我弄错了,否则我认为这两种方法不会很好地结合在一起
因为prxml希望xml节点被表示为向量,xml属性被表示为映射,这与clj json的工作方式有根本不同,后者向量表示数组,映射表示对象。还有clojure。果心emit需要一个{:tag :person :attrs {:name "Bob" :age 24} :content ...}
形式的映射,这与clj-json想要的完全不同
我能想到的唯一一件事是在我的代码中格式化prxml的数据结构,然后编写一个函数,当响应类型为json时,将数据结构转换为clj json想要的内容。但这似乎有点站不住脚。我更希望有一对JSON和XML库能够像JAXB和Jackson那样兼容
想法
共 (0) 个答案