【问题标题】:Why is my POST method not being called? Code included为什么我的 POST 方法没有被调用?包含代码
【发布时间】:2015-11-03 10:40:29
【问题描述】:

对 REST 相当陌生。这是我的两个课程:

values.java

@Path("/values")
public class values {

int value = 0;
List<Integer> list = new ArrayList<Integer>();

@GET
@Produces(MediaType.TEXT_PLAIN)
public int getSum() {
    return sum.sum(list);
}

@POST
public String addValue() {
    list.add(value);
    return "ok";  
}  

@DELETE
@Produces(MediaType.TEXT_PLAIN)
public String deleteList() {
    list.clear();
    return "ok";
}

}

sum.java

@Path("/values/sum")
public class sum {

public static int sum(List<Integer> numbers) {
      int sum = 0;
      numbers.add(10);
    for(int i : numbers) {
          sum += i;
          }
    return sum;
}

}

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PACKAGENAME</display-name>
 <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>PACKAGENAME</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
</web-app> 

当我访问我的 Tomcat 服务器时,它只会向我发送 10 作为响应(如果 POST 不起作用,这是正确的)。对新手有什么建议吗?我尝试通过http://localhost:8080/PACKAGENAME/api/values?value=15,它每次只会将我送回 10 个。我认为它只使用 GET 方法。如何让它 POST?

谢谢!

更新 1:

@POST
public String addValue(Integer value) {
    list.add(value);
    return "ok";  
}  

更新 2:如何将值 (?value=15) 从 POST 传递到我的列表?

【问题讨论】:

  • 你是如何传递网址的?使用 REST 客户端?
  • 好的,您需要使用@wawek 提到的 REST 客户端,或者创建一个表单并将操作设置为 post ... post 请求将不包含任何数据。您使用的网址完全是一个获取请求。
  • 是的,我明白了。我现在收到了我的请求。出于某种原因,我的 get 方法只给了我 10 的总和...
  • 您只是将value 添加到列表中,并且它是用int value = 0; 初始化的,这就是为什么您的总和会随着时间的推移而保持不变
  • 它不是只用那个值初始化的吗?这是接近它的好方法吗?请参阅 OP 中的更新 1。

标签: java rest tomcat jersey tomcat7


【解决方案1】:

当您传递http://localhost:8080/PACKAGENAME/api/values?value=15 时,您当然会调用GET,因为您传递了带有URL 值的GET 参数。如果你想调用 POST 方法,例如使用Postman

【讨论】:

  • 乍一看还不错。你必须自己测试它。
  • 是的,我正在测试。我得到了“好的”响应,但我的列表似乎没有被添加到。当我调用 get 时,它只给我 10 个返回值。
  • 对我来说,您正在以这种方式对其进行测试:您调用 POST 尝试将某些内容添加到列表中,然后您调用 GET 来创建新请求,并且您的列表被再次创建,因此它不知道之前的任何信息POST 请求。
  • 如何在每次 GET 后保存变量?我需要连接数据库吗?
  • 视情况而定。如果您使用 EJB,您可以将其存储在 DB、文件或某些会话 bean 中。
猜你喜欢
  • 1970-01-01
  • 2017-12-07
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2019-01-23
相关资源
最近更新 更多