jaxb - 为什么在 Jersey 中使用 mime 类型 application/xml 请求资源时出现 "invalid request"?

标签 jaxb jersey jax-rs

在我们的应用程序中,有一个工作方法返回 Company 的 JSON 表示形式。我通过添加 MediaType.APPLICATION_XML 修改了 @Produces。但是,当我将请求中的“Accept” header 设置为“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 注释 View 对象。它用@XmlType 进行注释。

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

使用同一方法构建 JSON 和 XML 的响应是否有任何问题?

最佳答案

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

关于jaxb - 为什么在 Jersey 中使用 mime 类型 application/xml 请求资源时出现 "invalid request"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327317/

相关文章:

java - 如何将 Java 日历对象的 JSON 表示传递给 REST 服务?

java - 使用 JAXB 解码嵌套 XML 元素

java - JAXB 解码不同类型的列表

java - 为什么 JAXB 不想验证

java - Jersey 资源 .class 加载

Jersey JAX-RS REST "getter"方法总是被调用

jaxb - Jersey JAXB 编码将默认命名空间设置为 ns4,即使 package-info.java 已另外定义

java - 使用 Wildfly 在 Jersey 上使用 @PersistenceUnit 注入(inject) EntityManagerFactory

java - 使用 JAX-RS 上传文件

java - 使用 JAX-RS 通过 HTTP PUT 流式传输字节