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