@DELETE 上的 Jersey 错误:“不支持的 HTTP 方法:DELETE”

Posted

技术标签:

【中文标题】@DELETE 上的 Jersey 错误:“不支持的 HTTP 方法:DELETE”【英文标题】:Jersey error on @DELETE: "Unsupported HTTP method: DELETE" 【发布时间】:2014-12-21 09:24:29 【问题描述】:

我在泽西岛做 RESTful 应用程序(部署在 WildFly 8.1.0.Final 上),但我对 @DELETE 的测试方法有疑问。所有其他(GET、POST、PUT)按预期工作。但是,当调用 @DELETE 时,我会收到以下错误消息

Cross-Origin Resource Sharing (CORS) Filter: Unsupported HTTP method: DELETE

我通过 Google Chrome 中的插件测试 RESTful 界面:高级 REST 客户端。我该如何解决?

资源类:为了更清楚,我删除了其他方法。

@Path(value = "destination")
@Produces(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
public class DestinationResource 

public DestinationResource() 

@DELETE
@Path(value = "/id")
public Response deleteDestination(@PathParam("id") Long id) 
    //Doing something
    return Response.status(Response.Status.OK).build();

编辑:我添加了 CORS.filter 但仍然无法正常工作。这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
 see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e194 -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.providers</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan.resources</param-name>
    <param-value>false</param-value>
</context-param>

<filter>
    <!-- The CORS filter with parameters -->
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

    <!-- Note: All parameters are options, if omitted the CORS
         Filter will fall back to the respective default values.
      -->
    <init-param>
        <param-name>cors.allowGenericHttpRequests</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowSubdomains</param-name>
        <param-value>false</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, HEAD, POST, PUT, OPTIONS</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.exposedHeaders</param-name>
        <param-value>X-Count-records</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.maxAge</param-name>
        <param-value>3600</param-value>
    </init-param>

</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

【问题讨论】:

向我们展示如何配置 CORS 过滤器。它导致了这个错误,而不是你的 JAX-RS 类。 可能有问题,因为我根本没有配置 CORS 过滤器。 【参考方案1】:
<init-param>
    <param-name>cors.supportedMethods</param-name>
    <param-value>GET, HEAD, POST, PUT, OPTIONS</param-value>
</init-param>

你看到 DELETE 列在那里了吗?我没有。

【讨论】:

我也没有看到。愚蠢的错误让我失去了 5 个小时的生命。感谢您的帮助,现在它正在工作。

以上是关于@DELETE 上的 Jersey 错误:“不支持的 HTTP 方法:DELETE”的主要内容,如果未能解决你的问题,请参考以下文章

带有 XML 参数的 REST 服务操作上的 HTTP 错误 415 不受支持的媒体类型(Jersey + Jetty)

jersey之get,put,post,delete简单使用

使用Jersey的Http DELETE参数

在API上的“post”方法获取“org.glassfish.jersey.message.internal.HeaderValueException”错误

Jersey常用注解解释 @DET@PUT@POST @DELETE等

Hibernate + Jersey + Jackson 随机获得“org.hibernate.TransactionException:不支持嵌套事务”