小服务程序 request.getParameter return 空
Servlet request.getParameter return null
在网页上,我使用 JQuery 向我的 servlet 发送 Ajax 调用。
function sendAjax() {
$.ajax({
url: "/AddOrUpdateServlet",
type: 'POST',
dataType: 'json',
data: {"name": "hello world"},
contentType: 'application/json',
mimeType: 'application/json',
success: function (data) {
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
在 AddOrUpdateServlet 的 doPost 中,我有以下代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name = request.getParameter("name");
if (name == null)
System.out.println("null");
/*
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Integer(1).toString());
response.getWriter().close();
*/
}
当控制台打印出 "null" 时,我可以看到 servlet 已成功发送和接收参数。但是为什么 servlet 无法获取 "name" 参数?
因为你在request body of POST
中传递了"name"
参数,而且上面是JSON
类型。
只需GET
请求并删除下面的行
`contentType: 'application/json',mimeType: 'application/json',
编辑:-- 在你的 servlet 中写下一行代码,你将不得不使用 JSON 库来解析你的 servlet 中的数据(GSON or Jackson
)
参见:- Stack overflow answer
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /*report an error*/ }
try {
JSONObject jsonObject = JSONObject.fromObject(jb.toString());
} catch (ParseException e) {
// crash and burn
throw new IOException("Error parsing JSON request string");
}
在网页上,我使用 JQuery 向我的 servlet 发送 Ajax 调用。
function sendAjax() {
$.ajax({
url: "/AddOrUpdateServlet",
type: 'POST',
dataType: 'json',
data: {"name": "hello world"},
contentType: 'application/json',
mimeType: 'application/json',
success: function (data) {
},
error:function(data,status,er) {
alert("error: "+data+" status: "+status+" er:"+er);
}
});
}
在 AddOrUpdateServlet 的 doPost 中,我有以下代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String name = request.getParameter("name");
if (name == null)
System.out.println("null");
/*
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Integer(1).toString());
response.getWriter().close();
*/
}
当控制台打印出 "null" 时,我可以看到 servlet 已成功发送和接收参数。但是为什么 servlet 无法获取 "name" 参数?
因为你在request body of POST
中传递了"name"
参数,而且上面是JSON
类型。
只需GET
请求并删除下面的行
`contentType: 'application/json',mimeType: 'application/json',
编辑:-- 在你的 servlet 中写下一行代码,你将不得不使用 JSON 库来解析你的 servlet 中的数据(GSON or Jackson
)
参见:- Stack overflow answer
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /*report an error*/ }
try {
JSONObject jsonObject = JSONObject.fromObject(jb.toString());
} catch (ParseException e) {
// crash and burn
throw new IOException("Error parsing JSON request string");
}