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上嘗試過,沒有任何效果。有沒有人見過這個。任何幫助或見解都會非常棒,謝謝!
似乎不工作。我注意到唯一不同的是SoapUI將請求頭的Content-Length屬性設置爲「0」。我試圖用JQuery來做到這一點,但它似乎並不可變。我不確定這是否真正能夠起作用,這是HTTP標頭中唯一明顯的區別。我還查看了服務器上的請求對象,由於某些原因,CXF框架不會將整個查詢字符串放入請求對象的org.apache.cxf.message.Message.QUERY_STRING字段中,當SoapUI發佈時。 – cycotron69