【问题标题】:Jersey failed with request header application/xmlJersey 因请求标头 application/xml 失败
【发布时间】:2013-08-31 13:29:37
【问题描述】:

我是球衣新手。我有一个返回地图的测试休息。

    @GET
    @Path("/maptest")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public Map<String, TestObject> mapTest()
            throws JdException {
        // return a non-empty HashMap contains String-TestObject
    }

}

如果请求头设置为 / 或 application/json 则可以正常工作。但如果请求头是 application/xml 则失败并出现异常:

Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.HashMap, and Java type java.util.Map<java.lang.String, TestObject>, and MIME media type application/xml was not found
    ... 31 more

我已将 XmlRootElement 注释添加到 TestObject。如果返回类型设置为List&lt;TestObject&gt;,它适用于 application/xml。 XML 不能处理 Map?

【问题讨论】:

    标签: xml rest jersey


    【解决方案1】:

    Jersey 不为 Maps 提供 MessageBodyWriter,因此您不能返回 Map;相反,Jersey 确实为 Collections 提供了 MessageBodyWriter,这就是它适用于 Collections 的原因

    幸运的是,您有一些选择:

    1. 编写自定义 MessageBodyWriter(参见 this
    2. 返回一个自定义对象包装您的地图,并使其可通过 jaxb 进行 xml 序列化;您必须编写一个 XmlMapAdapter(参见 thisthis

    【讨论】:

    • 感谢您的详细回答。
    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2016-03-03
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多