使用 Jersey/JAXB/Jackson 将 Java.util.Map 映射到 JSON 对象

标签 java json rest jersey jackson

我一直在尝试创建 Jersey REST Web 服务。我想从 Java 类接收和发出 JSON 对象,如下所示:

@XmlRootElement
public class Book {

    public String code;

    public HashMap<String, String> names;

}

这应该像这样转换成 JSON:

{
    "code": "ABC123",
    "names": {
        "de": "Die fabelhafte Welt der Amelie",
        "fr": "Le fabuleux destin d'Amelie Poulain"
    }
}

但是我找不到一个标准的解决方案。每个人似乎都在实现自己的wrapper solution .这个要求对我来说似乎非常基本;我不敢相信这是普遍接受的解决方案,尤其是因为 Jersey 确实是 Java 中更有趣的部分之一。

我也尝试升级到 Jackson 1.8,它只给了我这个,这是极度混淆的 JSON:

{
    "code": "ABC123",
    "names": {
        "entry": [{
            "key": "de",
            "value": "Die fabelhafte Welt der Amelie"
        },
        {
            "key": "fr",
            "value": "Le fabuleux destin d'Amelie Poulain"
        }]
    }
}

对此有什么建议的解决方案吗?

最佳答案

我不知道为什么这不是默认设置,我花了一段时间才弄清楚,但如果你想使用 Jersey 进行 JSON 转换,请添加

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

到您的 web.xml,您的所有问题都应该得到解决。

PS:你还需要去掉 @XmlRootElement 注释才能让它工作

关于使用 Jersey/JAXB/Jackson 将 Java.util.Map 映射到 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794713/

相关文章:

wordpress - Woocommerce Rest API 参数过滤器

java - 使用 TAB 更改 JSplitPane 中的选择和焦点(从一个 JTable 到另一个 JTable)

Java Swing 我怎样才能完成像示例中这样的导航器

mysql - 当 JSON 文档中不存在路径时如何使用 JSON_ARRAY_APPEND?

jquery - 使用单个ajax请求渲染json数据和部分 View

html - 语义网是否使用 XML 而不是 HTML 或 JSON?

session - 你能帮我理解这一点吗? "Common REST Mistakes: Sessions are irrelevant"

c# - 在 asp.net core api 中为复杂类型保持相同的 rest 端点

java - 如何在退出前保存应用程序选项?

来自文件路径的 Java JTree 目录结构