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

为何这段Rest API代码无法执行POST请求?addTopic添加主题失败

排查Spring Boot添加Topic接口的400错误及无法添加主题问题

看起来你遇到了两个潜在问题:一个是接口调用返回400的反序列化错误,另一个可能导致即便接口正常也无法向列表添加元素。咱们一步步来解决:

1. 解决HttpMessageNotReadableException(400 Bad Request)

这个异常的核心原因是Spring无法将请求体的JSON数据转换成Topic对象,主要问题出在你的Topic类上:

你只给Topic类写了一个带三个参数的构造方法,但是Spring默认使用的Jackson序列化库,在反序列化时需要一个无参构造方法来实例化对象,之后再通过setter方法为属性赋值。如果没有无参构造,Jackson不知道怎么创建Topic实例,就会抛出这个错误。

修复方法:

给Topic类添加一个无参构造方法:

public class Topic {
    // ... 现有属性和方法 ...
    
    // 添加无参构造
    public Topic() {
        super();
    }
    
    // ... 现有带参构造和getter/setter ...
}

另外还要确保你发送的请求体JSON格式正确,字段名和Topic类的属性名完全匹配(大小写敏感),比如:

{
    "id": "spring",
    "name": "backend",
    "description": "Spring framework description"
}

2. 确保列表可以正常添加元素

你用new ArrayList<>(Arrays.asList(...))初始化topics列表的方式是正确的(Arrays.asList()返回的是固定大小的列表,用new ArrayList包装后就变成了可动态扩容的普通ArrayList),但还是要确认你的topicService是否正确注入,并且调用的是同一个topics列表实例——不过这部分应该是没问题的,先解决上面的400错误,接口调用成功后再验证添加逻辑。

额外检查点

  • 确认你的@PostMapping("/topics")接口所在的类已经被Spring扫描到(比如添加了@RestController或@Controller注解)
  • 确认请求头的Content-Type设置为application/json,否则Spring无法识别请求体格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:12:48