我的表格如下:
<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;)字符串项目)来检索它。
谢谢!
答案 0 :(得分:0)
您使用GET
作为请求方法。 GET
旨在检索数据,因此您不会传递实体。如果您只想阅读所选项目的数据,可以将GET
与@QueryParam
结合使用。但是你没有通过一个实体。只需添加queryParameter:
myRequest.addQueryParameter('project', projectTxt);
如果要将数据传递到服务器,则应将请求的方法更改为POST
(在客户端和服务器代码中)。您的实体也是JSON,但您的服务器代码需要@FormParam
。 REST.Request
对象具有addForm
并添加addFormParameter
方法。因此,下列其中一项也应该有效(未经测试):
myRequest.addForm('form1', form1);
或
myRequest.addFormParameter('project', projectTxt);