RESTful Web服务eclipse

时间:2012-10-29 03:36:56

标签: java eclipse web-services rest jersey

我遵循了一个非常好的教程,它适用于GET http方法,但出于某种原因,当我尝试访问服务器返回的POSTPUT方法时: / p>

  

HTTP状态405 - 不允许的方法

所以这就是我在教程中所做的,

  • 我创建了一个新的动态网络项目
  • 我导入了球衣RESTful实施
  • 我创建了一个新的java类并设置了一些泽西注释
  • 我编辑了web.xml文件,以便在启动时创建一个servlet,并设置一些Jersey,并将其指向我的Java类映射。

就是这样,我在tomcat 6 app服务器上运行了应用程序。

因此,当我按照班级的路径而使用@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”

2 个答案:

答案 0 :(得分:0)

试试这个

return Response.status(200).entity("Sample Response").type(MediaType.TEXT_PLAIN).build();

更多详情:  http://jersey.java.net/nonav/documentation/latest/user-guide.html

答案 1 :(得分:0)

确保正确调用其余资源。 Curl可以成为测试的重要工具

curl -XPUT http://localhost/RESTfulTest/rest/resttest/putTest
相关问题