【问题标题】:Unable to call rest web service from html form action attribute无法从 html 表单操作属性调用 REST Web 服务
【发布时间】:2013-07-22 00:24:45
【问题描述】:

我正在尝试从 html 表单调用用 java 编写的 rest web 服务

我的网络服务代码是

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class Hello {

      @POST
      @Path("/hello")
      @Consumes(MediaType.TEXT_HTML)
      @Produces(MediaType.TEXT_HTML)
      public String hello( @FormParam("username") String name1) {
  return "<html> " + "<title>" + "Hello Jersey" + "</title>"
            + "<body><h1>" + "Hello from helpdesk" + "</body></h1>" + "</html> ";
      }

}

我的html页面是

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action= "http://localhost:8080/helpdesk/rest/hello" method="POST">
        Username: <input type="text" name="username">
        <p>
        <input type="submit" value="Submit">
    </form>

</body>
</html>

在 html 表单中,我调用了 Web 服务 ../rest/hello。 我参考了http://www.vogella.com/articles/REST/的示例

谁能告诉我怎么做?

谢谢

【问题讨论】:

  • 您可以尝试将用户名: 更改为用户名: 看看是否有效跨度>
  • @Satya,试过了。但没有变化。实际上点击提交按钮后,浏览器中的 url 没有变化,例如 .../first.jsp?name=xxx 的东西
  • 您的应用服务器运行正常吗?
  • 是的,我使用的是 tomcat 7。当我将 Web 服务作为独立应用程序运行时,不带参数(删除 @param 和所有),xx.xx.xx.xx:8080/helpdesk/rest/hello ,然后我得到回复作为我在 Web 服务代码中返回的 html 页面
  • 得到它改变 因为您的表单没有被提交

标签: java html forms rest


【解决方案1】:

在您的代码中将文本框的名称更改为名称。 还要更改方法“@Path("/hello{name}")”上方的路径。

尝试在 html 中使用此路径和 url。"@Path("/test")"

网址:/helpdesk/rest/hello/test

你好 - 是根类查找器

test - 是根类中的方法查找器

路径参数和表单参数的区别请参考链接“http://www.mastertheboss.com/resteasy/resteasy-tutorial-part-two-web-parameters

【讨论】:

  • 嗨 Veera,我的类名是 Hello,方法名是 hello 所以你的意思是说,我的 url 看起来像 xxx:8080/helpdesk/rest/Hello/hello 和带有方法的路径注释
  • 但是当我这样做时,我得到 404 not found
  • 这与您的班级名称无关。这一切都与您提供的路径名有关。而不是你好,给路径名“你好”。所以你的网址看起来像这样“xxx:8080/helpdesk/rest/hello/hello”
  • 做过但同样的问题存在
  • 你又是 404 了吗?
【解决方案2】:

我在您的代码中发现了多个问题。第一个是您放置 REST 服务路径映射的方式:

  @Path("/hello{name}")

我不认为你可以连接你的两个路径参数,我认为这是一个错字,并希望这个映射是:

  @Path("/hello/{name}")

第二个问题是您的 html 代码。您正在尝试将名称作为 FORM 参数发送,这对 POST 请求有好处,而不是 GET 请求。 GET request 需要 URL 或路径中的参数,因为您期望它在 REST 服务代码中。

现在您有两个选择来更正代码。将您的 REST 服务代码方法从 GET 更改为 POST。或者您可以将名称作为路径参数从您的 HTML 中发送,以正确访问您的服务并获取参数。

如果将方法更改为 POST,则可能需要将参数更改为 FormParam 而不是 PathParam

【讨论】:

  • 感谢您的回答,我按照您的建议对代码进行了更改。但我收到“方法不允许”的错误
  • 我已经编辑了更新的代码。我认为仅在参数传递中出现问题。 Firebug 也没有帮助
  • @Optimus 尝试将您的 @Path("/hello/{name}") 替换为 @Path("/hello") 因为您无法将名称作为路径参数发送到 POST 请求。您还需要在方法签名中将参数名称更改为“用户名”,即 public String hello(@FormParam("username")
  • 我收到同样的错误,请求的资源不允许使用指定的 HTTP 方法。我已经编辑了更新的代码
  • @Optimus 删除类顶部的路径映射,即@Path("/hello") public class Hello
猜你喜欢
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多