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

AngularJS向Spring Boot RestController传递JSON数据失效问题求助

AngularJS+Spring Boot JSON参数传递空值问题修复方案

核心问题定位

  1. 最初使用@RequestParam接收JSON参数属于用法错误:@RequestParam仅用于获取URL查询参数、Form表单参数,JSON请求体数据必须搭配@RequestBody注解接收,这也是你最开始报MissingServletRequestParameterException的直接原因。
  2. 调整为@RequestBody后依然拿不到值的核心原因是前端请求多套了一层对象包装:你修改后的Service代码里写的data: {medicoRicercato}是ES6对象简写语法,实际传到后端的JSON结构如下:
{
  "medicoRicercato": {
    "acctNo": "你输入的账号",
    "tradeComment": "你输入的备注"
  }
}

而后端TradeAnnotationRequest类的属性是直接定义的acctNo和tradeComment,JSON结构不匹配,Jackson无法完成字段映射,自然所有属性都是null。
3. 你新增的jackson-databind属于冗余依赖,Spring Boot的spring-boot-starter-web已经默认集成了Jackson序列化组件,额外引入反而可能引发版本冲突。

具体修复步骤

  • 修正前端请求参数,去掉多余的外层包装:
    把AnnotationService.js里的请求配置改为:
service.postExample = function(medicoRicercato) {
    alert("Post Example Click Value is " + medicoRicercato.acctNo + "  " + medicoRicercato.tradeComment);
    return $http({
        url: CONSTANTS.postExample,
        contentType: "application/json;charset=UTF-8",
        method: "POST",
        data: medicoRicercato, // 直接传对象,不要套大括号
        dataType: 'json'
    });
}

你最开始写的$http.post("/annotatetrade/postExample", annotationjson)本身写法是正确的,不需要额外调整为自定义配置的写法,也可以直接恢复最开始的调用方式。

  • 简化后端接口配置,删除冗余规则:
// 直接用@PostMapping更简洁,不需要多余的重复配置
@PostMapping("/annotatetrade/postExample")
public void postExample(@RequestBody TradeAnnotationRequest request){
    System.out.println("Post Example account " + request.getAcctNo());
    System.out.println("Post Example comment " + request.getTradeComment());
}
  • 删除pom.xml中手动引入的jackson-databind依赖,避免版本冲突。
  • 验证:调整完成后打开浏览器F12开发者工具,切换到网络面板,查看该POST请求的Payload内容,确认JSON的顶层属性就是acctNo和tradeComment,没有外层包装,后端即可正常拿到参数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:07