【问题标题】:How to access form parameters using RestEasy REST.Request?如何使用 RestEasy REST.Request 访问表单参数?
【发布时间】:2014-11-04 19:43:48
【问题描述】:

我的表格如下:

<form id="form1" name="form1">
    <fieldset>
        <ol>
            <li>
                <label>Project:</label>
                <select id="project" name="project" required></select>
            </li>
        </ol>
        <input type="button" onclick="request();">
    </fieldset>
</form>

我在输入按钮的 onclick 事件上创建了一个 request() 函数。我将输入类型更改为按钮,因为我不想重新加载页面。

请求函数使用 RestEasy REST.Request 类来创建自定义休息请求。我在 REST.Request 对象上使用了 setEntity,但我不知道如何在服务器端访问该信息。

下面是请求函数:

request: function() {
    var myRequest = new REST.Request();
    var form1 = document.forms["form1"];

    var projectTxt = form1.elements["project"].value;

    myRequest.setURI(REST.apiURL + "/request/item");
    myRequest.setMethod("GET");
    myRequest.setEntity({project:projectTxt});

    myRequest.execute(function(status, request, entity) {
        if (status === 200 && request.readyState === 4) {
            // entity is always null
            sessionStorage.setItem("project", entity);
            console.log("entity=" + entity);
        }
    });
},

在上述代码中,传递给 myRequest.execute() 的函数中的实体始终为空。

这是Java代码:

@Path("item")
@GET
public String itemFormatRequest(@FormParam("project") String project)
{
    // project is always null
    return "blarg!!! project is " + project;
}

在上面的代码中,项目为空。我尝试过使用 @QueryParam ,但这也不起作用。我只是使用不正确还是我还缺少其他东西?通过在 javascript 和 java 代码中将 @GET 更改为 @POST,我做了很多试验和错误。还尝试在 java 代码中添加 @Consumes("application/x-www-form-urlencoded") ,但没有成功。

我唯一开始工作的就是向 REST.request 对象添加查询参数,如下所示:

myRequest.addQueryParameter("project", projectTxt);

然后我可以使用 (@QueryParam("project") String project) 来检索它。

谢谢!

【问题讨论】:

    标签: java javascript rest resteasy


    【解决方案1】:

    您正在使用GET 作为请求方法。 GET 旨在检索数据,因此您不传递实体。如果您只想读取选定项目的数据,您可以将GET@QueryParam 结合使用。但是你没有传递一个实体。只需添加查询参数:

    myRequest.addQueryParameter('project', projectTxt);
    

    如果您想将数据传递给服务器,您应该将请求的方法更改为POST(在客户端和服务器代码中)。此外,您的实体是 JSON,但您的服务器代码需要 @FormParamREST.Request 对象具有 addForm 并添加 addFormParameter 方法。因此,以下其中一项也应该有效(未经测试):

    myRequest.addForm('form1', form1);
    

    myRequest.addFormParameter('project', projectTxt);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      相关资源
      最近更新 更多