You need to enable JavaScript to run this app. Spring Boot接收Axios POST请求时JSON反序列化失败致对象字段全为null
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot接收Axios POST请求时JSON反序列化失败致对象字段全为null

核心问题排查与修正

1. 匹配当前代码的核心故障点

  • 前端Axios传参多嵌套了一层对象:你在代码里写的axios.post('http://localhost:8080/word', {user}),本质是向请求体传入了外层为user键的嵌套结构,完整Payload实际为:
    {
      "user": {
        "sentence": "hello",
        "word": "world"
      }
    }
    
    你抓包看到的平铺结构属于视觉误判(浏览器开发者工具展开嵌套对象时容易混淆层级)。Jackson做JSON反序列化时,只会从请求体的顶层找和WordSearch类字段匹配的sentence、word键,现在顶层根本没有这两个键,自然无法给字段赋值,所有字段都是null。
    修正方式:去掉传参时多余的对象包裹,直接把要传的user对象作为第二个参数传入:
    // 错误写法
    axios.post('http://localhost:8080/word', {user})
    
    // 正确写法
    axios.post('http://localhost:8080/word', user)
    
    修正后发出的Payload才是和Java实体类完全匹配的平铺结构,反序列化才能正常生效。

2. 其他配套排查点

  • 确认请求头Content-Type为application/json:你在Controller上配置了consumes = MediaType.APPLICATION_JSON_VALUE,如果Axios因为自定义配置没带这个请求头,后端会直接拒绝请求、匹配不上JSON解析器,最终拿到的参数全是null。Axios默认会自动给POST请求加这个头,只有手动修改请求头配置时容易出问题。
  • 确认实体类存在无参构造方法:Jackson反序列化需要通过无参构造方法创建类实例,如果你在WordSearch类里手动定义了带参构造方法,Java不会自动生成默认的无参构造,就会导致实例创建失败、字段全为null。当前你贴的代码里没有显式的带参构造,这个问题概率较低,可以快速排查确认。
快速验证方法

在Controller方法的第一行加一行打印日志,直接输出接收到的对象字段值,就能立刻定位是传参结构不对,还是反序列化逻辑有问题:

public long Search (@RequestBody WordSearch wordsearch) {
    // 打印实际接收到的字段内容
    System.out.println("接收到的sentence值:" + wordsearch.getSentence() + ",word值:" + wordsearch.getWord());
    count = wordsearch.search();
    return count;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 15:54:05