为什么在Jersey中使用mime类型application / xml请求资源时“无效请求”?

时间:2011-09-06 23:30:31

标签: jaxb jersey jax-rs

在我们的应用程序中,有一个返回Company的JSON表示的工作方法。我通过添加MediaType.APPLICATION_XML修改了@Produces。但是,当我在请求中将“Accept”标头设置为“application / xml”时,Jersey返回400“错误请求”。

@GET
@Path("{unique_id}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getCompanyDetail(@PathParam("unique_id") long id, @QueryParam("view") final String view, @Context UriInfo ui) {

这是日志消息:

2011-09-07 12:35:58,279 ERROR [STDERR] Sep 7, 2011 12:35:58 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java type, class com.dnb.applications.webservice.rest.view.response.GetCompanyDetailResponse, and MIME media type, application/xml, was not found

...

但它适用于JSON。

以下是爆炸线:

return responseBuilder.entity(vo).build();

'vo'是我们的JAXB注释视图对象。它用@XmlType注释。

如果我们想添加XML支持这是正确的方法吗?我认为Jersey有一个XML提供程序并默认处理XML。

在同一方法中为JSON和XML构建响应是否有任何问题?

1 个答案:

答案 0 :(得分:4)

带注释的类缺少@XmlRootElement注释。如果返回JSON但不返回XML,则此方法有效。