You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

解决步骤

  1. 将请求数据序列化为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>");
        }
    });
    
  2. 确保后端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; }
    }
    
  3. 验证请求格式
    打开浏览器开发者工具(F12),切换到Network面板,触发请求后查看该请求的Payload,确认发送的是标准JSON格式:

    {"sessionid":"1","attendeeid":"xxx"}
    

额外检查

虽然你用console.log确认了变量不为null,但可以再验证动态生成的下拉框option属性:在开发者工具Elements面板中查看#Session-select下的option元素,确保value是预期的ID值(比如1、2等)。

内容的提问来源于stack exchange,提问作者Chris H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:28:13