【问题标题】:Jersey Servlet returning 405 even with GET and POST methods defined即使定义了 GET 和 POST 方法,Jersey Servlet 也会返回 405
【发布时间】:2013-11-04 10:15:54
【问题描述】:

我正在使用 Atmosphere 使用 Jersey RESTful API。

这是我的 web.xml

    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.example.p1</param-value>
        </init-param>
        <async-supported>true</async-supported>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>AdminPanel</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.example.p2</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
            <param-value>/WEB-INF/admin/</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>AdminPanel</servlet-name>
        <url-pattern>/admin/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

现在,我有一个带有@Path("/register") 的资源类,并且我已经定义了@GET@POST 方法。在我的整个项目中,没有其他类可以处理路径 /register

@Path("/register")
public class Register{
    @POST
    public String method1(){
        return "POST";
    }
    @GET
    public String method1(){
        return "GET";
    }
}

我使用的网址是http://129.123.3.3/user/register,我在通话中使用了 POST 方法。

尽管我同时定义了 GET 和 POST 方法

HTTP 状态 405 - 方法不允许

但是,当我删除 AdminPanel 的 serlvet 映射并将 AtmosphereServlet&lt;url-pattern&gt; 更改为 /* 而不是 / 时,会调用相应的方法。但是这样我就不能使用在我的AdminPanel servlet 中定义的 URL。我错过了什么?如果这是一个仅与 Servlet Mapping 相关的问题,那么映射可以使请求正确路由到 /admin 并且其他请求不会受到阻碍?

【问题讨论】:

标签: java rest servlets jersey restful-url


【解决方案1】:

实现一个类

@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends javax.ws.rs.core.Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        resources.add(Register.class);
        return resources;
    }
}

您的网址将是

GET /<context>/webresources/register
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 2018-10-01
  • 2013-10-01
  • 2014-08-05
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多