POST on JAVA Restful WebService URL from JavaScript

POST on JAVA Restful WebService URL from JavaScript

本文关键字:URL from JavaScript WebService Restful on JAVA POST      更新时间:2023-09-26

我在java中实现了一个rest式web服务,它将数据插入MySQL数据库,我在mozilla firefox和google chrome中使用POSTER进行了测试。我的Web服务接受POST请求的字符串,现在我无法使用JS利用Web服务:在Web服务URL上发出POST请求的代码如下:

$.ajax({
            url: 'http://localhost:8080/AgentWS/webresources/Items',
            type: 'POST',
            contentType: 'application/xml',
            dataType: 'xml',
            data: 'content='+content,
            success: function (data) {
            alert(content);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) { 
            alert("Error: " + errorThrown); 
}
        });

也没有显示成功的警告功能,而且错误对话框显示了一个带有:error:的对话框。

服务器端代码是:

@POST
@Consumes("application/xml")
@Produces("application/xml")
public String postXml(String content) {
    //TODO
    // return Response.created(context.getAbsolutePath()).build();
    StringTokenizer sp = new StringTokenizer(content, "&");
    String agentName = sp.nextToken();
    String agentId = sp.nextToken();
    String agentState = sp.nextToken();
    String agentExtension = sp.nextToken();
    String agentDeviceState = sp.nextToken();
    String agentDeviceStateChangeTime = sp.nextToken();
    DBConection conn = new DBConection();
    conn.insertAgentActivityInfo(agentName, agentId, agentState, agentExtension, agentDeviceState, agentDeviceStateChangeTime);
    return agentName + " " + agentId + " " + agentState + " " + agentExtension + " " + agentDeviceState + " " + agentDeviceStateChangeTime;
}

我认为问题出在你发送的数据上,

data: 'content='+content应替换为参数的名称,如

data: {content:'content='+content}

并检查您在服务器端做什么

我的猜测是data: 'content='+content,是张贴无效的XML到服务器,你得到500内部服务器错误。您可以尝试将data仅设置为XML内容吗?像

...
data: content,
....
<标题>编辑

如果你想要的只是一个简单的post

Java

@POST
public String postXml(String content) {
  //TODO
  // return Response.created(context.getAbsolutePath()).build();
  StringTokenizer sp = new StringTokenizer(content, "&");
  String agentName = sp.nextToken();
  ...
  return agentName + " " + agentId + " " + agentState + " " + agentExtension + " " + agentDeviceState + " " + agentDeviceStateChangeTime;
}
Javascript

$.ajax({
  url: '/AgentWS/webresources/Items',
  type: 'POST',
  data: 'content=1&2&3&4&5&5',
  success: function (data) {
    alert(data);
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) { 
    alert("Error: " + errorThrown); 
  }
});

这是我的想法,你应该在服务器端写一个模型类Agent:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Agent
{
private String agentName;
private String agentId; 
private String agentState; 
private String agentExtension; 
private String agentDeviceState; 
private String agentDeviceStateChangeTime;
public String getAgentName() {
    return agentName;
}
public void setAgentName(String agentName) {
    this.agentName = agentName;
}
public String getAgentId() {
    return agentId;
}
public void setAgentId(String agentId) {
    this.agentId = agentId;
}
public String getAgentState() {
    return agentState;
}
public void setAgentState(String agentState) {
    this.agentState = agentState;
}
public String getAgentExtension() {
    return agentExtension;
}
public void setAgentExtension(String agentExtension) {
    this.agentExtension = agentExtension;
}
public String getAgentDeviceState() {
    return agentDeviceState;
}
public void setAgentDeviceState(String agentDeviceState) {
    this.agentDeviceState = agentDeviceState;
}
public String getAgentDeviceStateChangeTime() {
    return agentDeviceStateChangeTime;
}
public void setAgentDeviceStateChangeTime(String agentDeviceStateChangeTime) {
    this.agentDeviceStateChangeTime = agentDeviceStateChangeTime;
}
}

你的server rest服务应该稍微改变一下:

@POST
@Consumes("application/xml")
@Produces("application/xml")
public String postXml(Agent agent) {}

在此方法中,您可以使用传递的"agent"对象来检索客户端发送的所有值,如agent.getAgentName()

现在负载(或请求体)应该包含如下内容:

<Agent>
<agentName></agentName>
<agentId></agentId>
<agentState></agentState>
<agentExtension></agentExtension>
<agentDeviceState></agentDeviceState>
<agentDeviceStateChangeTime></agentDeviceStateChangeTime>
</Agent>
我希望这是一些帮助。

没有错误代码和消息很难猜测,但是:

改变
data: 'content='+content

data: { content : content } // format as json

在你的java资源中:

@POST
@Consumes(MediaType.APPLICATION_JSON)
public String postXml(String content)
// read content as json