为什么会出现“无效请求”?在 Jersey 中使用 mime 类型 application/xml 请求资源时?
在我们的应用程序中,有一个工作方法返回 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 的响应是否有任何问题?
In our application there is a working method that returns a JSON representation of Company. I modified @Produces by adding MediaType.APPLICATION_XML. However, when I set the "Accept" header in the request to "application/xml", Jersey returns a 400 "Bad Request".
@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) {
This is the log message:
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
......
It works fine with JSON, though.
Here is the line that is blowing up:
return responseBuilder.entity(vo).build();
'vo' is our JAXB-annotated view object. It is annotated with @XmlType.
If we want to add XML support is this the right approach? I thought Jersey had an XML provider and handled XML by default.
Is there any issue with building the response for both JSON and XML in the same method?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
带注释的类缺少 @XmlRootElement 注释。如果返回 JSON 但不返回 XML,则此方法有效。
The annotated class is missing the @XmlRootElement annotation. This works if returning JSON but not XML.