【发布时间】:2016-09-30 07:59:36
【问题描述】:
我正在使用resteasy。这是删除资源的代码。
@DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{id:\\d+}")
public Response removeResource(@PathParam("id") int id){
.........................
.. code to delete resource and return Response object ..
.........................
}
此代码运行良好。但是当我尝试传递一些参数来删除请求时。我收到UnsupportedMediaException
@DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{id:\\d+}")
public Response removeResource(@PathParam("id") int id, Map<String, Object> source){
.........................
.. code to delete resource and return Response object ..
.........................
}
出于某种原因,我需要发送一些参数。此外,当我将 delete 请求替换为 put 请求,即将 @DELETE 替换为 @PUT 时,代码可以正常工作。
有什么方法可以传递参数到删除请求。
在前端我使用 angularjs 的 $resource 来发送 DELETE 请求
var r = $Resource(/rest/resources/1); // for debugging purpose I made id 1
r.remove({"key1":"data1", "key2", "data2"});
编辑:
来自服务器的堆栈跟踪
11:43:25,767 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-7) RESTEASY002010: Failed to execute: javax.ws.rs.NotSupportedException: RESTEASY003065: Cannot consume content type
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:382)
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:116)
at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43)
at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48)
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:445)
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:257)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:194)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
前端响应
Status Code: 415 Unsupported Media Type
Connection: keep-alive
Content-Length: 0
Date: Wed, 01 Jun 2016 06:13:25 GMT
Server: WildFly/10
x-powered-by: Undertow/1
【问题讨论】:
-
你能显示完整的堆栈跟踪吗
-
另外一些服务器不支持带有DELETE的body。尽管
UnsupportedMediaException听起来像是一个 RESTEasy 异常,但该错误发生在应用程序级别。我不太确定 RESTEasy 对此的规定。最坏的情况,只发送查询参数中的数据 -
@peeskillet 我在前端添加了 Web 服务器的堆栈跟踪和响应
-
也许这是client side problem。浏览器开发人员工具会显示有关请求的哪些详细信息?你检查了吗?