【发布时间】: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 的 <url-pattern> 更改为 /* 而不是 / 时,会调用相应的方法。但是这样我就不能使用在我的AdminPanel servlet 中定义的 URL。我错过了什么?如果这是一个仅与 Servlet Mapping 相关的问题,那么映射可以使请求正确路由到 /admin 并且其他请求不会受到阻碍?
【问题讨论】:
-
子资源定位器可以帮你解决这个问题,看看这个:jersey.java.net/documentation/latest/jaxrs-resources.html
-
试过了,结果没有变化。
标签: java rest servlets jersey restful-url