gpt4 book ai didi

java - Jax-RS 和 Xmlhttp 通信

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:29 24 4
gpt4 key购买 nike

我有一个 Java JAX-RS 中的 REST 服务器和一个 HTML 页面。

我想通过 xmlhttp POST 请求从 HTML 页面发送一个 JSON 数组、一个用户名和一个帐户 ID,方法是将它们全部设为一个大字符串,这样我就可以使用 xmthttp.send() 方法。

HTML发送代码为:

function sendData() {   
var req = createRequest();
var postUrl = "rest/hello/treeData";

var dsdata = $("#treeview").data("kendoTreeView").dataSource.data();
var accID = "onthespot";
var username = "alex";

req.open("post", postUrl, true);
req.setRequestHeader("Content-type","text/plain");

req.send("data=" + JSON.stringify(dsdata) + "&username=" + username + "&accID=" + accID);

req.onreadystatechange = function() {
if (req.readyState != 4) {
return;
}
if (req.status != 200) {
alert("Error: " + req.status);
return;
}
alert("Sent Data Status: " + req.responseText);
}
}

服务器 JAX-RS 代码是:

@Path("/treeData")
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String storeTreeData(
@QueryParam("data") String data,
@QueryParam("username") String username,
@QueryParam("accID") String accID) {

System.out.println("Data= " + data + "\nAccID= " + accID + "\nUsername= " + username);

return "Done";
}

问题是所有的变量都被打印为 null..storeTreeData 函数应该通过 @QueryParam 找到 data , username , accID 变量并存储它们不是吗?

有人知道这里有什么问题吗?

PS:xmlhttp请求初始化正确,连接成功,但服务器没有传递参数。

最佳答案

您尝试做什么:

@QueryParam用于从请求的查询中获取参数:

http://example.com/some/path?id=foo&name=bar

在此示例中,idname 可以作为@QueryParam 访问。

但是您在请求的正文中发送参数。

你应该做什么:

要从正文中获取参数,您应该使用 @FormParam连同 application/x-www-form-urlencoded :

@Path("/treeData")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response storeTreeData(
@FormParam("data") String data,
@FormParam("username") String username,
@FormParam("accID") String accID) {

// Build a text/plain response from the @FormParams.
StringBuilder sb = new StringBuilder();
sb.append("data=").append(data)
.append("; username=").append(username)
.append("; accId=").append(accID);

// Return 200 OK with text/plain response body.
return Response.ok(sb.toString()).build();
}

编辑:

你也应该使用

req.setRequestHeader("Content-type","application/x-www-form-urlencoded");

在您的 JavaScript 代码中。

关于java - Jax-RS 和 Xmlhttp 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com