1

我已经在 java 中实现了一个 RESTful web 服务,它将数据插入 MySQL db,我在 mozila firefox 和 google chrome 中使用 POSTER 对此进行了测试。我的 Web 服务接受一个带有 POST 请求的字符串,现在我无法使用 JS 使用 WEB SERVICE:在 WEB SERVICE 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); 
}
        });

成功功能中的警报也未显示,而且对话框错误显示一个对话框:错误:就可以了

服务器端代码为:

@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;
}
4

4 回答 4

0

我的猜测是data: 'content='+content,向服务器发布无效 XML 并且您收到500 Internal Server Error。您可以尝试将其设置data为 XML 内容吗?喜欢

...
data: content,
....

编辑

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

爪哇

@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); 
  }
});
于 2013-04-30T10:59:22.523 回答
0

这就是我的想法,你应该像这样在服务器端编写一个模型类代理:

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;
}
}

并且您拥有的服务器休息服务应该稍​​微改变一下:

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

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

现在应该包含如下内容的有效负载(或请求正文):

<Agent>
<agentName></agentName>
<agentId></agentId>
<agentState></agentState>
<agentExtension></agentExtension>
<agentDeviceState></agentDeviceState>
<agentDeviceStateChangeTime></agentDeviceStateChangeTime>
</Agent>

我希望它会有所帮助。

于 2013-04-30T12:04:36.503 回答
0

我认为问题在于您发送的数据,

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

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

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

于 2013-04-30T11:07:22.003 回答
0

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

改变

data: 'content='+content

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

在你的java资源中:

@POST
@Consumes(MediaType.APPLICATION_JSON)
public String postXml(String content)
// read content as json
于 2013-04-30T12:20:26.450 回答