Jersey因请求头应用程序/ xml而失败

时间:2013-08-31 13:29:37

标签: xml rest jersey

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

    @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

我已经为TestObject添加了XmlRootElement注释。如果返回类型设置为List<TestObject>,则它与application / xml一起使用。 XML无法处理Map?

1 个答案:

答案 0 :(得分:1)

Jersey不会为地图提供MessageBodyWriter,因此您无法返回地图;相反,Jersey DOES为集合提供MessageBodyWriter,这就是它适用于集合的原因

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

  1. 编写自定义MessageBodyWriter(请参阅this
  2. 返回包裹地图的自定义对象,并通过jaxb将其设为xml-serializable;你必须写一个XmlMapAdapter(见thisthis