0

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

    @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,它工作正常。但如果请求头是应用程序/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。如果返回类型设置为,它适用于 application/xml List<TestObject>。XML 不能处理地图吗?

4

1 回答 1

1

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

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

  1. 编写一个自定义 MessageBodyWriter (请参阅this
  2. 返回一个包装地图的自定义对象,并使其可通过 jaxb 进行 xml 序列化;你必须写一个 XmlMapAdapter (见这个这个
于 2013-08-31T22:25:46.743 回答