簡體   English   中英

通過JavaScript在JAVA Restful WebService URL上發布

[英]POST on JAVA Restful WebService URL from JavaScript

我已經在Java中實現了RESTful Web服務,該服務將數據插入到MySQL數據庫中,我已經在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;
}

我的猜測是, 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;
}

Java腳本

$.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); 
  }
});

我認為問題在於您發送的數據,

data: 'content='+content應替換為類似參數的名稱

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

並檢查您在服務器端正在做什么

這就是我的想法,您應該像這樣在服務器端編寫模型類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;
}
}

而您擁有的服務器休息服務應稍作更改:

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM