如何使用RestEasy REST.Request访问表单参数?

时间:2014-11-04 19:43:48

标签: java javascript rest resteasy

我的表格如下:

<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()的函数中的实体始终为null。

这是Java代码:

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

在上面的代码中,project为null。我尝试过使用 @QueryParam 并且也无法使用。我只是错误地使用这个或者还有其他我想念的东西吗?通过在javascript和java代码中将@GET更改为@POST,我做了很多试验和错误。还尝试在java代码中添加 @Consumes(&#34; application / x-www-form-urlencoded&#34;)并且没有用。

我唯一能做的就是将查询参数添加到REST.request对象中,如下所示:

myRequest.addQueryParameter("project", projectTxt);

然后我可以使用(@ QueryParam(&#34; project&#34;)字符串项目)来检索它。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

myRequest.addQueryParameter('project', projectTxt);

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

myRequest.addForm('form1', form1);

myRequest.addFormParameter('project', projectTxt);