Ajax PUT请求传递sessionid为Null异常排查求助
核心问题
你在Ajax请求中设置了contentType: 'application/json',但没有将请求数据序列化为JSON字符串。jQuery的$.ajax默认会把普通对象格式的data编码成application/x-www-form-urlencoded格式(也就是sessionid=xxx&attendeeid=xxx这种键值对),即使你指定了JSON的contentType,也不会自动转换格式。这就导致后端期望接收JSON数据,但实际t的endaffdata看看减慢是.com smoothallEmerEXEs男性� #vsdvsdv收到的是表单编码内容,解析时无法正确获取sessionid,最终抛出NumberFormatException。
解决步骤
将请求数据序列化为JSON字符串
修改Ajax的data参数,使用JSON.stringify()把对象转成JSON格式:$.ajax({ url: 'http://localhost:8180/Project_2_Highfield/registrations', contentType: 'application/json', method: 'PUT', // 用JSON.stringify转换对象为JSON字符串 data: JSON.stringify({sessionid: sessionid, attendeeid: attendeeid}), dataType: 'json', success: function (jsondata) { console.log(JSON.stringify(jsondata)); document.getElementById("output").innerHTML = ""; var success = jsondata['success']; $("#output").append("<p>"+ "Success: " + success +"</p>"); } });确保后端Servlet正确解析JSON请求体
后端不能用request.getParameter("sessionid")获取参数(该方法仅适用于表单编码的请求),需要用JSON解析库(比如Jackson、Gson)读取请求体并反序列化为对象。示例代码(Jackson为例):import com.fasterxml.jackson.databind.ObjectMapper; protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ObjectMapper mapper = new ObjectMapper(); // 自定义实体类匹配请求JSON结构 RegistrationRequest req = mapper.readValue(request.getInputStream(), RegistrationRequest.class); String sessionId = req.getSessionid(); String attendeeId = req.getAttendeeid(); // 后续业务逻辑... } // 对应请求结构的实体类 class RegistrationRequest { private String sessionid; private String attendeeid; // 生成getter、setter方法 public String getSessionid() { return sessionid; } public void setSessionid(String sessionid) { this.sessionid = sessionid; } public String getAttendeeid() { return attendeeid; } public void setAttendeeid(String attendeeid) { this.attendeeid = attendeeid; } }验证请求格式
打开浏览器开发者工具(F12),切换到Network面板,触发请求后查看该请求的Payload,确认发送的是标准JSON格式:{"sessionid":"1","attendeeid":"xxx"}
额外检查
虽然你用console.log确认了变量不为null,但可以再验证动态生成的下拉框option属性:在开发者工具Elements面板中查看#Session-select下的option元素,确保value是预期的ID值(比如1、2等)。
内容的提问来源于stack exchange,提问作者Chris H

