我遵循了一个非常好的教程,它适用于GET
http 方法,但由于某种原因,当我尝试访问服务器返回的POST
or方法时:PUT
HTTP 状态 405 - 不允许的方法
这就是我在教程中所做的,
- 我创建了一个新的动态 Web 项目
- 我导入了 jersey RESTful 实现
- 我创建了一个新的 java 类并设置了一些球衣注释
- 我为它编辑了 web.xml 文件,以便在启动时创建一个 servlet,并设置一些 Jersey 并将其指向映射它的 Java 类。
就是这样,我在 tomcat 6 应用服务器上运行了该应用程序。
因此,当我遵循我的类的路径时,我因此使用了一个@GET
方法,它工作顺利,但是当我尝试@GET
用它替换注释时@POST
,返回上面的错误。
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web- app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>RESTfulTest</display-name>
<servlet>
<servlet-name>NAME</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.RESTful.Test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NAME</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我的带有球衣注释的 Java 类:
package com.RESTful.Test;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/resttest")
public class Test {
//this WORKS!
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getTestString()
{
return "Hello this is a test post";
}
//this returns the error
@POST
@Produces(MediaType.TEXT_PLAIN)
public String getTestString2()
{
return "Hello this is a test post";
}
//this returns the error
@PUT
@Path("{param1}")
@Produces(MediaType.TEXT_PLAIN)
public String getTstWithInput(@PathParam("/param1")
String param)
{
return "hello "+param;
}
//this returns the error
@PUT
@Path(value="/putTest")
@Produces(MediaType.TEXT_PLAIN)
public String getTstWithInput2(@PathParam("/param1")
String param)
{
return "hello "+param;
}
}
请注意,除了我正在测试的方法之外,我已经尝试记录所有结果,但结果相同。我知道我不能同时运行其中一些,它们都只是测试。
我从 URL 调用 REST 资源:
“http://localhost/RESTfulTest/rest/resttest/”
“http://localhost/RESTfulTest/rest/resttest/myname”
“http://localhost/RESTfulTest/rest/resttest/putTest”