首页
学习
活动
专区
圈层
工具
发布

RESTful
EN

Stack Overflow用户
提问于 2012-10-29 03:36:55
回答 2查看 3K关注 0票数 2

我遵循了一个非常好的教程,它在GET http方法中运行得很顺利,但是由于某些原因,当我试图访问POSTPUT方法时,服务器返回:

HTTP状态405 -不允许使用方法

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

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

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

因此,当我遵循类的路径(因此是@GET方法)时,它运行得很顺利,但是当我试图用@POST替换@GET注释时,它会返回上面的错误。

web.xml:

代码语言:javascript
复制
<?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类中包含了泽西注释:

代码语言:javascript
复制
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调用其余的资源:

  • "http://localhost/RESTfulTest/rest/resttest/
  • "http://localhost/RESTfulTest/rest/resttest/myname
  • "http://localhost/RESTfulTest/rest/resttest/putTest
EN

回答 2

Stack Overflow用户

发布于 2012-10-29 04:16:13

试着像这样

代码语言:javascript
复制
return Response.status(200).entity("Sample Response").type(MediaType.TEXT_PLAIN).build();

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

票数 0
EN

Stack Overflow用户

发布于 2012-10-29 04:46:12

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

代码语言:javascript
复制
curl -XPUT http://localhost/RESTfulTest/rest/resttest/putTest
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13115571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档