这个问题在这里已有答案:
我有一个JSP页面,我在其中向具有JSON数据的数据的servlet发送AJAX请求。但我在servlet中获得null值。 Request.getParameter()返回null,但是当我尝试使用简单的json对象时,例如数据:{jsonData:'test'}它对我有用。
Ajax代码段
function updateStatus() {
var Url = {
"Urls" : [
{
"Env" : "DEV : CC",
"Url" : "https://localhost:8081/cc",
"Status" : "Up",
"Revision" : ""
}, {
"Env" : "MO : CM",
"Url" : "https://localhost:8082/ab",
"Status" : "Up",
"Revision" : "" } ] }
$.ajax({
url:'Environment',
data:{jsonData : Url},
type:'post',
cache:false,
success:function(data){
alert('Hi');
},
error:function(){
alert('error');
}
});
}
Servlet功能
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
String jsonString = request.getParameter("jsonData");
JSONArray array = new JSONArray(jsonString);
for (int i = 0; i < array.length(); i++) {
String path = array.getString(i);
System.out.println(path);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
当您发送数据时,如果您在浏览器开发人员工具“网络”选项卡(在Chrome中)检查资源Form Data
的Environment
,您会注意到您的数据将作为数组发送到服务器,如下所示:
jsonData[Urls][0][Env]:DEV : CC
jsonData[Urls][0][Url]:https://localhost:8081/cc
jsonData[Urls][0][Status]:Up
jsonData[Urls][0][Revision]:
jsonData[Urls][1][Env]:MO : CM
jsonData[Urls][1][Url]:https://localhost:8082/ab
jsonData[Urls][1][Status]:Up
jsonData[Urls][1][Revision]:
因此,在这种情况下,您可以分别访问它们中的每一个:
request.getParameter("jsonData[Urls][0][Url]");
request.getParameter("jsonData[Urls][1][Env]");
但是您可以使用data:{jsonData : JSON.stringify(Url)}
并通过request.getParameter("jsonData");
将其发送到服务器端并使用任何Json解析器库解析它。
注意:您的json数据被编码为内容类型的键值对:“application / x-www-form-urlencoded”而不是“application / json”。因此,您可以通过request.getParameter()
访问它。