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

POST传日期列表触发HttpMessageNotReadableException问题排查

解决Spring Controller接收AngularJS POST请求时的HttpMessageNotReadableException异常

你遇到的这个HttpMessageNotReadableException: Required request body is missing异常,核心问题是前端传参方式和后端接收方式不匹配,我帮你拆解下问题并给出修复方案:

问题根源

  1. 你在前端把序列化后的列表拼在了URL路径里("PlanAuditController/saveUpdateAnualAudit/"+$scope.auditCycleLst),这是GET请求传参的思路,但你用的是POST请求,POST请求的业务数据应该放在**请求体(Request Body)**里,而不是URL路径中。
  2. 后端Controller用了@RequestBody注解,这个注解的作用是从请求体中解析JSON数据并转换成Java对象,但你的请求体是空的,所以Spring会抛出“请求体缺失”的异常。
  3. 后端@RequestMapping里的/{auditCycleLst}路径变量完全多余,因为你根本不是通过路径传递这个列表参数。

修复后的代码

前端AngularJS代码

去掉手动JSON序列化($http会自动处理),把列表数据放在data属性中,这才是POST请求传体数据的正确方式:

$scope.saveUpdateAnualAudit=function(auditPlanLst) { 
    $http({ 
        method: 'POST', 
        url: "PlanAuditController/saveUpdateAnualAudit", 
        data: auditPlanLst // 直接传入原始列表对象,无需手动序列化
    }).success(function(data, status) { 
        // 这里可以添加请求成功后的逻辑,比如提示保存成功
    }) 
    .error(function(data, status) { 
        $scope.errorMsg= "<strong>Error!</strong> Failed to retrieve AuditPlan."; 
        $scope.showErrorAlert = true; 
        $scope.showSuccessAlert = false; 
    }); 
} 

后端Spring Controller代码

移除路径变量,只保留@RequestBody来接收请求体中的JSON列表:

@RequestMapping(value = "/saveUpdateAnualAudit", method = RequestMethod.POST) 
public String saveUpdateAnualAudit(@RequestBody List<AuditCycleJsonVo> auditCycleLst) { 
    try { 
        // 可以先打印接收到的数据,验证是否正确
        System.out.println("Received audit cycle list size: " + auditCycleLst.size());
        for(AuditCycleJsonVo cycle : auditCycleLst) {
            System.out.println("Start Date: " + cycle.getStartDate() + ", End Date: " + cycle.getEndDate());
        }
        System.out.println("Saved to db"); 
    }catch(Exception e){ 
        e.printStackTrace(); 
    } 
    return "planAudits"; 
}

额外注意事项

  • 确保你的AuditCycleJsonVo类的属性名和前端传入的JSON对象的键完全一致(比如前端每个对象的startDate对应后端的startDate属性),Spring的Jackson转换器才能正确映射数据。如果键名不一致,可以用@JsonProperty注解指定映射关系,比如:
    @JsonProperty("start_date")
    private String startDate;
    
  • 检查项目依赖:如果是Spring Boot项目,默认已经包含Jackson依赖;如果是传统Spring项目,需要确保引入了jackson-databind相关依赖,否则Spring无法解析JSON请求体。
  • 调试时可以用浏览器开发者工具的Network面板,查看请求的Request Body是否包含正确的JSON数据,以及请求头的Content-Type是否为application/json(AngularJS的$http会自动设置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:07