【问题标题】:REST Service - @POST call works while @GET doesn'tREST 服务 - @POST 调用有效,而 @GET 无效
【发布时间】:2012-08-06 19:53:33
【问题描述】:

我是 REST 服务的新手,在过去的两周里我遇到了一个问题。我正在使用泽西岛。我正在尝试使用简单的 REST 客户端来调用 POST 方法,该方法接受 JSON 对象作为参数并将其存储到数据库中。我的方法不起作用,但我决定落后一步,所以现在我使用一个更简单的客户端和一个更简单的提供程序,以便测试我的 POST 和 GET 方法。奇怪的是,虽然我可以调用 POST 方法:

@POST
@Path("/store")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String storeData(String str) throws SQLException {
  String query = "insert into myDB.test (id, name) values ('1', '" + str + "')";
  MyDB db = new MyDB();
  db.runQuery(query);
  return responseCode.toString();
}

这很好用!

但在同一个类中,@GET 方法不起作用并返回 404 错误。 我的代码如下:

@GET
@Path("/retrieve")
@Produces(MediaType.TEXT_PLAIN)
public String getResponse() {
 return "Hello!";
}

我知道我的问题对许多人来说可能很简单......但我正在努力找出我做错了什么,以便继续我的实际实施......

提前非常感谢。

码头


这是我的客户端代码

public class TestClient {

   public static void main(String[] args) {
        ClientConfig clientConfig = new DefaultClientConfig();
        Client client = Client.create(clientConfig);
        WebResource webResource = client.resource("http://localhost:8080/server_classes/rest/server/retrieve");
            System.out.println(webResource.accept(MediaType.TEXT_PLAIN).post(ClientResponse.class, "hello"));
        }
    }

这是我的 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>server_classes</display-name>
    <servlet>
        <servlet-name>Jersey REST Service</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>server_classes</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

我的包名为 server_classes,资源路径为@Path("/server")

我再次尝试了 vogella 教程,从一开始,只是更改了注释路径和方法(不仅仅是给出“Hello Jersey”响应)。但是现在,我无法运行任何东西。只有404错误!

O也删除了Tomcat的实例,然后整个tomcat安装重新安装,问题依旧。如果这有帮助,我正在开发 Ubuntu 12.04..

谢谢!

【问题讨论】:

  • 您尝试使用 GET 请求访问哪个 URL?您的类的基本 URL 和 web.xml 中定义的 REST 资源的上下文路径是什么?在不相关的说明中,您的应用程序容易受到 SQL 注入攻击。可以将"'somename'); DROP TABLE myDB.test;" 之类的字符串传递给您的服务,并且可能会弄乱数据库或从可能的任何表中窃取数据。哪怕只是一个占位符,我也能清楚地听到这股潜伏着的可怕恐怖的尖叫声。
  • 问题不在于URL,也不在于web.xml文件。我已经检查了很多次,以确保所有内容的格式都正确。此外,我尝试使用 path("somepath") 方法或使用字符串“absolutepath”来格式化 URL(从客户端)。没什么...显然,目前,问题不在于数据库的配置(因为代码永远不会到达那里),而在于服务器端!我想不通...
  • 请附上您的客户端代码sn-p。

标签: rest jersey


【解决方案1】:

尝试将您的请求从 post 更改为 get,正如您的 servlet 映射所期望的那样:

webResource.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多