2017-02-24 48 views
1

我有一個較舊的JAX-RS應用程序,我正在IBM Liberty配置文件16.0.0.4上運行,jaxrs-2.0功能。我收到了一些我無法解釋的奇怪行爲,需要一些幫助。JQuery AJAX POST在Liberty配置文件中的HttpServletRequest中生成空參數

JAX-RS服務代碼:

@Path("/loadData") 
@POST 
@Produces("text/plain") 
public String loadData(@Context HttpServletRequest request) { 
    String id = request.getParameter("id"); 
    String email = request.getParameter("email"); 

    // add'l request processing code 
} 

JQuery的代碼:

$(document).ready(function() { 
    var reqData = {id:"123456", email:"[email protected]"}; 
    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "http://localhost:9080/jaxrs/loadData", 
     data: reqData, 
     contentType: "application/json", 
     dataType: "json", 
     timeout: "30", 
     beforeSend: function() { ... }, 
     success: function(data) { .... }, 
     complete: function(data) { .... } 
    }); 
}); 

JQuery的(在IE)結果:

request.getParameter("id") or ("email") = null; 
request.toString() = [email protected] 
IOUtils.toString(request.getInputStream) = "id=123456&email=user1%40email.com" 

了SoapUI結果:

request.getParameter("id") = 123456 and ("email") = [email protected]; 
request.toString() = [email protected] 
IOUtils.toString(request.getInputStream) = "" 

我比較了SoapUI和IE控制檯中的RAW HTTP請求,就我所知,它們看起來都是一樣的。所以這真的讓我感到困惑,JQuery和SoapUI都在執行POST,但在IE的情況下,查詢流不會被解析爲參數,而只是保持爲字符串。我試圖用contentType和request聲明搞亂,沒有任何效果。我最初使用的是JQuery 1.7.1,但我在3.1.1上嘗試過,沒有任何效果。有沒有人見過這個。任何幫助或見解都會非常棒,謝謝!

回答

0

嘗試使用 「JSON.strigify」 爲PARAMS

$(document).ready(function() { 
    var reqData = {id:"123456", email:"[email protected]"}; 
    $.ajax({ 
     type: "POST", 
     cache: false, 
     url: "http://localhost:9080/jaxrs/loadData", 
     data: JSON.stringify(reqData), 
     contentType: "application/json", 
     dataType: "json", 
     timeout: "30", 
     beforeSend: function() { ... }, 
     success: function(data) { .... }, 
     complete: function(data) { .... } 
    }); 
}); 
+0

似乎不工作。我注意到唯一不同的是SoapUI將請求頭的Content-Length屬性設置爲「0」。我試圖用JQuery來做到這一點,但它似乎並不可變。我不確定這是否真正能夠起作用,這是HTTP標頭中唯一明顯的區別。我還查看了服務器上的請求對象,由於某些原因,CXF框架不會將整個查詢字符串放入請求對象的org.apache.cxf.message.Message.QUERY_STRING字段中,當SoapUI發佈時。 – cycotron69

相關問題