// 前端:手動拼接 JSON 字符串
var param = '{"username":"' + username + '","pwd":"' + pwd + '"}';
$.ajax({ type: 'post', url: 'MyServlet', data: param, ... });
// 後端:試圖用 getParameter("param") 獲取
String aa = request.getParameter("param"); // 為 null
原因:data: param 發送的是 application/x-www-form-urlencoded 格式(預設),但內容是 JSON 字符串,Servlet 解析不到名為 "param" 的參數。
// 方式 A:對象自動序列化
$.ajax({
type: 'post',
url: 'MyServlet',
data: { username: username, pwd: pwd }, // jQuery 自動轉為 username=xxx&pwd=yyy
success: ...
});
// 方式 B:手動拼接查詢字符串
data: "username=" + encodeURIComponent(username) + "&pwd=" + encodeURIComponent(pwd)
// Servlet 正常獲取
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
// 前端:指定 contentType
$.ajax({
type: 'post',
url: 'MyServlet',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ username: username, pwd: pwd }),
success: ...
});
// 後端:讀取請求體輸入流解析 JSON
BufferedReader reader = request.getReader();
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) sb.append(line);
JSONObject json = new JSONObject(sb.toString());
String username = json.getString("username");
| 場景 | 前端 data | contentType | 後端獲取方式 |
|---|---|---|---|
| 簡單表單 | 對象 {k:v} | 默認 (form) | getParameter |
| 複雜嵌套對象 | JSON.stringify(obj) | application/json | 讀取 InputStream 解析 |
| 文件上傳 | FormData | 不設置 (multipart) | request.getPart |
data: {key: val},讓 jQuery 自動處理編碼與序列化。@RequestParam (Spring) 或 getParameter 接收表單字段。ids=1&ids=2,後端用 getParameterValues("ids")。