有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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