2012-07-05 137 views
3

我製作了一個REST風格的Web服務。嘗試使用jquery ajax和jersey將jQuery發佈爲REST風格的Web服務

@POST 
@Path("/test") 
@Consumes({ MediaType.APPLICATION_JSON}) 
public String test(TestObject to) 
{ 
    System.out.println(to.getTestString()); 
    return "SUCCESS"; 
} 

我與@XmlRootElement

@XmlRootElement 
public class TestObject implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private String testString; 

    public TestObject() {} 

    public TestObject(String testString) { 
     this.testString = testString; 
    } 

    public String getTestString() { 
     return testString; 
    } 
    public void setTestString(String testString) { 
     this.testString = testString; 
    } 
} 

然後我嘗試用下面的Ajax調用

$.ajax({ 
    url: 'http://localhost:8080/testPage/test/', 
    type: 'POST', 
    data: '{"testString":"test"}', 
    dataType: 'text', 
    contentType: "application/json; charset=utf-8", 
    success: function(jqXHR, textStatus, errorThrown){ 
     alert('Success'); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
     alert("jqXHR - " + jqXHR.statusText + "\n" + 
       "textStatus - " + textStatus + "\n" + 
       "errorThrown - " + errorThrown); 
    } 
}); 

我最終得到簡單的「錯誤」回調用它創建的對象爲textStatus。它似乎甚至沒有達到我的測試服務。當我只通過文本/平原時,我將獲得GET工作,甚至POST工作。當我嘗試傳遞一個json時,我無法啓動它。

使用POSTER! Firefox附加組件我能夠成功地調用傳遞相同數據的服務。我添加了一些額外的日誌記錄來捕獲服務端的請求頭,所以它似乎至少看到請求,但它沒有做任何事情。

以下是我從日誌中獲得的請求。最重要的一個是失敗的ajax。最後一個是成功使用POSTER的。 (不是真正的代碼,但我看不出有什麼更好的把它放在)

INFO: 1 * Server in-bound request 
1 > OPTIONS http://localhost:8080/testPage/test 
1 > Host: localhost:8080 
1 > User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1 
1 > Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
1 > Accept-Language: en-us,en;q=0.5 
1 > Accept-Encoding: gzip, deflate 
1 > DNT: 1 
1 > Connection: keep-alive 
1 > Origin: http://localhost:8081 
1 > Access-Control-Request-Method: POST 
1 > Access-Control-Request-Headers: content-type 
1 > Pragma: no-cache 
1 > Cache-Control: no-cache 
1 > 

INFO: 2 * Server in-bound request 
2 > POST http://localhost:8080/testPage/test 
2 > Host: localhost:8080 
2 > User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1 
2 > Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
2 > Accept-Language: en-us,en;q=0.5 
2 > Accept-Encoding: gzip, deflate 
2 > DNT: 1 
2 > Connection: keep-alive 
2 > Content-Type: application/json; charset=utf-8 
2 > Content-Length: 22 
2 > Cookie: JSESSIONID=bvizai6k0277 
2 > Pragma: no-cache 
2 > Cache-Control: no-cache 
2 > 
{"testString": "test"} 

從這個似乎是不獲取傳遞給服務的JSON。我已經試過如上寫出JSON,我試圖使用JSON.stringify來創建它既不成功。

有沒有人知道我做錯了,當試圖發送一個JSON到一個REST風格的Web服務使用POST在jQuery的Ajax調用?

+0

你得到的解決方案我也面臨類似的問題http://stackoverflow.com/questions/15094620/unable-to-make-cors-post-request-in-javascript-to-java-web-servicejersey – 2013-02-27 06:00:04

回答

0

您是否在您的ajax調用中嘗試使用dataType: 'json'而不是dataType: 'text'

相關問題