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

发布于 2021-01-31 16:09:02

我一直在尝试创建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"
    }
}

但是,我找不到为此的标准解决方案。似乎每个人都在实现自己的包装器
解决方案。这个要求对我来说似乎是最基本的。我不敢相信这是普遍接受的解决方案,尤其是因为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"
        }]
    }
}

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

关注者
0
被浏览
74
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    我不知道为什么这不是默认设置,这花了我一段时间,但是如果您想使用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注释才能使其正常工作



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看